4

重複の可能性:
PHP サイトで xss 攻撃を回避するためのベスト プラクティスは
何ですか? XSS に対する一般的な防御策は何ですか?

私が作成した PHP アプリケーションを安全なものにしようとしていますが、出力のエスケープについて質問があります。PDO でプリペアド ステートメントを使用すると SQL インジェクションを防ぐことができるとわかったので、それを使用するように切り替えました。もう 1 つの主なタイプの攻撃は XSS のようです。次のようにページの出力を作成します (変数にはデータベースからのデータが含まれていると仮定します)。

$output = '';

$output .= '
<div style="float: left; width: 800px;">
    <span>Name:</span><span> ' . $name . '</span>
    <span>Address:</span><span>' . $addr . '</span>
    <span>Time:</span><span>' . time() . '</span>
</div>';

$output .='[lots more html]';

それで、私の質問は、htmlentities()出力されるデータベースからのすべてのデータを使用する必要があるかどうかです (典型的なページには、出力されるデータベースからの数十、場合によっては数百の変数があります)。

4

2 に答える 2

3

を使用する利点は 2 つありますhtmlentities()

  • XSS 防止
  • 特殊文字を適切な HTML エンティティに変換します。たとえば、著作権文字を に変換し&copy;ます。HTML コンテンツでは、生の特殊文字を挿入する代わりに、適切な HTML エンティティを使用する必要があります。

XSS 防止のために代わりに使用できますがhtmlspecialchars()、一部の基本的な文字、つまり引用符、アンパサンド、およびより小さい/より大きい文字のみが HTML エンティティに変換されます。

あなたの質問への回答として、htmlentities()ユーザー入力または特殊文字を含む可能性のあるコンテンツを出力するときに使用する必要があります。

于 2012-11-12T14:45:53.303 に答える
0

htmlspecialchars()で十分です。htmlentitiesXSSを妨げるものではなく、別の用途のためのものです。

于 2012-11-12T14:34:08.473 に答える