私はいつもstrip_tags
XSS攻撃を防ぐためですが、今日は恐ろしく危険だと言っている投稿を見ました。マニュアルが言うように、それは不正なHTMLをチェックしません!
本当ですか?
XSSを防ぐにはどうすればよいですか?
XSSを防ぐには、次のことを行う必要があります。
Validate処理するすべてのユーザー入力(例-id GETパラメータが数値である場合、PHPのis_number()
関数または Filter 拡張子を使用)。これには、GET/POSTパラメータだけでなく、Cookie名、Cookie値、HTTPヘッダー、アップロードされたファイル名なども含める必要があります。攻撃者はさまざまな方法でリクエストを操作できます。受け入れて表示する必要がある場合ユーザーからのHTMLコンテンツ(CMSアプリケーションなど)は、十分にテストされた HTMLPurifier ライブラリを使用して、JavaScriptおよびその他のXSSペイロードを除外し、クリーンでサニタイズされたHTMLのみを残します。
値を表示するときは、コンテキスト出力エンコーディングを使用します(「エスケープ」と呼ばれることもあります)。ユーザー指定の値をどのようにエンコードするかについては、次のような場合に異なるルールがあります。
<div>{$_GET['id']}</div>
_<div class='{$_GET['class']}'>
_<script> var a = '{$_GET['id']}'</script>
_<div style='background:url({$_GET['image']})'>
OWASP XSS Prevention Cheat Sheet で説明されている推奨ルールを参照することをお勧めします。 XSSは、今日のWebアプリケーションにとって #2リスク であるため、徹底的に読み、それを遵守してください。 OWSSP tutorial video on XSS も参照してください。
コンテキストエンコーディングを使用する必要があります。 owasp xss防止チートシート を参照してください。出力の場所に応じて、異なる方法でエンコードする必要があります。例として、次の入力はstrip_tagsによって失われますが、出力がhtmlテキスト入力のvalue属性にある場合はxssが発生します。 "autofocus onfocus =" alert(1)