Hello there, ('ω')ノ
🔍 状況の背景
多くのDOMベースXSSでは、innerHTML
シンクを通してHTMLにJavaScriptを埋め込もうとします。しかし、モダンブラウザでは次の制限があるため、従来のXSS手法が通用しません:
<script>
タグはinnerHTML
に書いても実行されない。<svg onload=...>
のようなSVG内のイベントは発火しない。
🧠 重要な回避ポイント
その代わりに、ブラウザが許可している画像やiframe要素を活用し、イベントハンドラ(onerror
やonload
)を使ってJavaScriptを発火させます。
✅ 有効なXSSペイロードの例
以下は、innerHTML
に挿入されても動作する攻撃例です:
<img src=1 onerror=alert(document.domain)>
このようなコードがJavaScriptで使われている場合:
element.innerHTML = '<img src=1 onerror=alert(document.domain)>';
上記ペイロードは画像の読み込みに失敗するため、onerror
イベントが発火し、alert
が表示されます。
🎯 応用例:iframeでも可能
<iframe src="javascript:alert(document.domain)"></iframe>
ただし、iframe
によるjavascript:
URIは一部ブラウザで制限があるため、img onerror
のほうがより確実に動作します。
🔒 対策方法
innerHTML
をユーザー入力に対して使わない。- 必要な場合でも、HTMLエスケープ処理を徹底する。
- 代わりに
textContent
やcreateElement
でDOMを安全に構築する。
Best regards, (^^ゞ