3

安全に使用する方法をテストしていますstripslashes()

私は次のことを試しました:

  $str = chr(0xbf) . chr(0x27);

  var_dump(stripslashes($str)); // string(2) " �' "

次に、これを次のように変更しました。

  $str = $_POST['input']; // %bf%27;

  var_dump(stripslashes($str)); // string(3) " �'' "

次に、curlinputを使用してデータを送信しました。

  curl_setopt($ch, CURLOPT_POSTFIELDS, 'input=' . chr(0xbf) . chr(0x27));

しかし、再び結果は次のとおりです。string(3) " �'' "

別のサーバーからデータを受信した場合、最初の例のように結果を取得することはできますか? 安全に使用できstripslashes()ますか?

4

1 に答える 1

0

ここで 2 つの質問をします。

ストリップスラッシュのセキュリティについて

stripslashes()入力を処理する安全な方法ではありません(データベースに送信されると思います)。関係する変数が多すぎます。

  • ターゲット データベース システム
  • データベース接続のエンコード
  • 見逃しやすいプログラマエラー

POSTデータ受信時

次のファイルを試してください。これは、調査対象の基本的なテスト ケースとして役立つはずです。これまでのところ、ご説明いただいた問題を再現できません。

test.php

<html>
<head></head>
<body>
<form method="POST" action="test.php">
<input type="text" name="input"></input>
<input type="submit" value="Submit"></input>
</form>

<?php 

$string = chr(0xbf) . chr(0x27); // yields string '¿'' (length=2)
$input = $_POST['input'];

foreach (array($string, $input) as $s) {
  var_dump(stripslashes($s));
  var_dump($s);
}

?>
</html>

得られた結果は、エンコーディングの問題を強く示しています。

于 2013-04-07T17:01:50.440 に答える