Secure Steady
DOM Based - DOM Based XSS の使い方・オプション・サンプル

DOM Based - DOM Based XSS

サーバーを経由せず、クライアントサイドの JavaScript が DOM を不適切に操作することで発生する XSS。innerHTML や document.write が原因。

概念図

DOM Based XSS diagram

攻撃シナリオ

location.hash を innerHTML に代入する脆弱なコード

bash
// 脆弱なコード
document.getElementById("output").innerHTML = location.hash.slice(1);

// 攻撃 URL
https://example.com/page#<img src=x onerror=alert(1)>

document.write を使った脆弱なコード

bash
// 脆弱なコード
document.write("<h1>" + new URLSearchParams(location.search).get("title") + "</h1>");

概要

DOM Based XSS は、サーバー側のレスポンスには悪意あるコードが含まれず、ブラウザ上の JavaScript が URL のフラグメント(#)やクエリパラメータを DOM に直接書き込むことで発生する。

サーバー側のログに痕跡が残らないため検知が難しく、WAF(Web Application Firewall)でも防御できない。

innerHTML, document.write, eval などの危険な API の使用が根本原因となる。

関連トピック