4

今日、phpで作成されたjavascript配列を持ち、phpのaddslashes()のみを使用してサニタイズするコードに出くわしました。最初は、これは簡単な XSS の脆弱性だと思っていましたが、これが欠陥であることは確認できていません。これが私が話していることの例です:

foo.php

$itemList = "[";

foreach ($array as $item) 
{
    $itemList .= "'".addslashes($item)."',";
}

$itemList = "'']";

bar.html

<script>
    var a = <?php echo $itemList; ?>
</script>

のようなもの']; alert("xss"); b=['は、 に変換されるため、明らかに効果がありません\']; alert(\"xss\"); b=[\'それで、これは本当に安全で、私のコードの匂いは存在しませんか?

`

`

編集:

誰かがこれがどのように機能しないかを教えてもらえますか? これがベストプラクティスではないことはわかっており、自分のコードでは使用しませんが、コードを書き直したい場合は、他の人を納得させる証拠が必要です

4

1 に答える 1

6

いいえ、いいえ、いいえ、いいえ、いいえ

適切な仕事のために適切な機能を使用してください。

addslashesコンテキストのエスケープ関数ではなく、スラッシュを追加するだけです。

HTMLに印刷する場合htmlentities(またはhtmlspecialchars該当する場合)。

JavaScriptに印刷する場合は、を使用してくださいjson_encode

MySQLクエリを作成している場合は、mysql_real_escape_string


addslashes代わりに使用する場合の悪用の機会json_encodeは、たとえば文字列です。 "</script><iframe src=hxxp://phising.mywebsite.com>"

これにより、スクリプトが終了し、信頼できない潜在的に有害なドメインからiframeが挿入されます。

于 2012-05-10T16:48:20.713 に答える