DOM型XSSの脆弱性は、DOMドキュメントオブジェクトモデルに基づいています
ツリー内のすべてのノードは、HTML DOMを通じてJavaScriptを介してアクセスすることができます。すべてのHTML要素(ノード)は変更することができます。また、ノードを作成または削除することができます。(引用W3C)
jsのコードは、このような脆弱性XSS-DOMを作成し、DOMツリーに埋め込むことができるので
低いです
<?PHPの #ノー保護、何でも行きます ?>
フロントを直接見ませPHPコードのありません、
ペイロード構造
?デフォルト = <スクリプト>警告( 'XSS')</スクリプト
成功の実装
中
<?PHP // 任意の入力はありますか? もし(array_key_exists( "デフォルト"、$ _GET!)&& IS_NULL($ _GET [ 'デフォルトの' ])){ $デフォルト = $ _GET [ 'デフォルトの' ]; #は、スクリプトタグを許可しない 場合(stripos($のデフォルト、 "<スクリプト")==!偽){ ヘッダー( "場所:デフォルト=英語?" ); 終了; } } ?>
striposは、最初の出現の検索文字列内の文字の位置を見つけるために機能します
$のデフォルトは<スクリプト、デフォルト?デフォルト=英語を発生した場合
私たちは、JavaScriptの擬似プロトコルで使用することができます
?デフォルト = </オプション> </ select>の<a href="javascript:alert('xss')">テストする</a>
高い
<?PHP // 任意の入力はありますか? もし(array_key_exists( "デフォルト"、$ _GET)&&!IS_NULL($ _GET [ 'デフォルトの' ])){ #ホワイトリスト許容言語を 切り替える($ _GET [ 'デフォルトの' ]){ 場合 "フレンチ": ケース「の英語「: ケース『ドイツ』: ケース『』スペイン語: #OK ブレーク。 デフォルト: ヘッダ( "場所:); 終了; } } ?>
switch文は、対応する結果を選出し、他のデフォルトは英語です
ペイロード#がサーバーに送信されません後にURLバーに文字が、ホワイトリストをバイパス実現するため、
?デフォルト =英語#の<script>警報(/ XSS /)</スクリプト>
不可能
<?PHPの #は何もする必要はありません、protctionクライアント側で処理 ?>
あなたは、クライアントプロセスを保護するために何かをする必要はありません
テスト入力の<script>のアラート( 'XSS')</スクリプト>
URL符号化は、それによってコードJSの実行を防止する、解釈され