Shikata Ga Nai

Private? There is no such things.

HTMLタグ属性内におけるXSS攻撃手法

Hello there, ('ω')ノ

🛡️ 脆弱性の背景

HTMLタグの属性値(例えば hrefvaluetitle など)にユーザー入力がそのまま埋め込まれている場合、XSS(クロスサイトスクリプティング)攻撃が可能になるケースがあります。


🎯 攻撃の基本アイデア

HTMLの属性内に悪意あるコードを挿入することで、JavaScriptを実行させるのが目的です。以下に2つの主要な手法を紹介します。


✅ 方法1:属性の終了とタグの閉鎖を試みる

"><script>alert(document.domain)</script>
  • 属性のクォート " を閉じ、
  • タグを終了 > させて、
  • script タグを挿入することで、任意のJavaScriptを実行します。

⚠️ しかし、**多くのサイトでは <> がエンコード(例:&lt;, &gt;)されるため、この方法は通用しないことが多いです。


✅ 方法2:イベント属性によるJavaScriptの挿入

" autofocus onfocus=alert(document.domain) x="
  • まず " で現在の属性を終了
  • autofocus で自動的にその要素にフォーカスを当て、
  • onfocus=alert(...) でスクリプトを実行
  • x=" でHTML構文を修復(バグなく表示されるように)

この手法は、<input><textarea><a> など、フォーカスを受け取る要素で有効です。


🔍 チェックポイント

対象 チェック内容
属性値内 クォート "' がエスケープされているか
イベント属性 onfocus, onclick, onmouseover などが使用可能か
自動トリガー autofocus, onload などが有効か

🧠 まとめ

  • タグ属性内ではイベントハンドラ+自動トリガーの組み合わせが強力な攻撃ベクトルです。
  • HTMLエンコード処理の有無で使える手法が変わるため、XSS検証では入力された値がどのように反映されているかをブラウザで確認することが重要です。

Best regards, (^^ゞ