DOM innerHTML sink
location, hash, postMessage などの信頼できない値が innerHTML のような unsafe sink に届くか確認します。
DOM sink テスト
このシナリオは iframe sandbox ではなく、ユーザー入力が HTML/DOM にどう描画されるかを検証します。
- untrusted source が innerHTML, outerHTML, insertAdjacentHTML に入るか確認
- textContent や DOM API に置き換えられるか確認
- client router, hash, postMessage payload を sink に入れる前に検証するか確認
Payload
コピーする payload
innerHTML 挿入時にイベントハンドラが実行されるか確認します。
プレビュー
このプレビューは学習用に意図的に unsafe rendering を行います。実サービスでは payload はテキストとしてエスケープされるか除去されるべきです。
ログ
// ログなし
解説
- DOM-based XSS はサーバー応答が安全でも、クライアントコードが untrusted source を unsafe sink に渡すことで発生します。
- 代表的な source は
location.search,location.hash,postMessage, storage 値で、sink はinnerHTML,outerHTML,insertAdjacentHTMLです。 - 可能なら
textContentや DOM API で描画し、HTML が必要な場合だけ信頼できる HTML フィルタを通してください。