Upgrade to Pro — share decks privately, control downloads, hide ads and more …

XSS?なんですかそれ?

Sponsored · SiteGround - Reliable hosting with speed, security, and support you can count on.

 XSS?なんですかそれ?

Security.any #05 今だから言えるセキュリティLT 登壇資料
https://security-any.connpass.com/event/356209/

Avatar for ryoAccount

ryoAccount

July 20, 2025

More Decks by ryoAccount

Other Decks in Technology

Transcript

  1. (おさらい)XSS ? • XSS(Cross-Site Scripting)は、悪意のあるスクリプトをWebページ に埋め込み、ブラウザ上で実行させる攻撃手法 • 入力フォームやURLパラメータなどを通じてスクリプトを注入し、以下のよ うな被害を引き起こす ◦

    Cookieやセッション情報の搾取 ◦ フィッシングサイトへの誘導 ◦ Webページの見た目や内容の改ざん • 大きく3種類ある ◦ 反射型:攻撃者が作成したリンクをクリックすることで、スクリプトが実行される ◦ 格納型:スクリプトがサーバに保存され、他ユーザに配信される ◦ DOM-based:WebページのHTMLが書き換えられて、スクリプトが実行される
  2. XSSの対策方法 • 出力時のエスケープ処理( 例:< → &lt; ) ◦ VueやReactなどのフレームワークは自動的にエスケープ処理を行ってくれる •

    Content Security Policy(CSP)の導入 • outerHTML/innerHTMLの使用を避ける • セキュリティ診断の実施&検出
  3. XSSの対策方法 • 出力時のエスケープ処理( 例:< → &lt; ) ◦ VueやReactなどのフレームワークは自動的にエスケープ処理を行ってくれる •

    Content Security Policy(CSP)の導入 • outerHTML/innerHTMLの使用を避ける • セキュリティ診断の実施&検出 ここに関しては最近、 HTMLの仕様に変更が!
  4. Q. 次のconsole.log()の出力結果は? <div data-content="<p>hello</p>"></div> <script> const div = document.querySelector("div"); console.log(div.outerHTML);

    // ★ </script> 属性値内の < と > がエスケープされるようになった A. <div data-content="&lt;p&gt;hello&lt;/p&gt;"></div>
  5. 変わったのは? • HTML文字列を取得する場合のみ、< と > がエスケープされる ◦ innerHTML ◦ outerHTML

    ◦ getHTML() • DOM APIを使って属性値を取得する場合、以前と変わらず ◦ dataset ◦ attributes ◦ getAttributes()
  6. なぜこの変更が必要だったのか? • ミューテーションXSS(mXSS)を防ぐため ◦ mXSS:ブラウザのHTMLパーサやDOMの自動修正機能を悪用する XSS • 通常のXSS対策では入力値のエスケープやサニタイズを行うが、mXSSではブ ラウザが勝手に「元に戻して」しまうため、意図せずスクリプトが復元され てしまう

    ◦ 例:攻撃者が一見すると無害な HTMLタグを仕込む ▪ <svg><desc>&lt;img src=x onerror=alert('XSS')&gt;</desc></svg> ◦ ブラウザがHTMLをパースする際、 &lt;img &gt; を <img> タグに変換してしまう ▪ <svg><desc><img src=x onerror=alert('XSS')></desc></svg> ◦ onerror=alert(“XSS”) が発火し、XSSが成立