DOM Based - DOM Based XSS
サーバーを経由せず、クライアントサイドの JavaScript が DOM を不適切に操作することで発生する XSS。innerHTML や document.write が原因。
概念図
攻撃シナリオ
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 の使用が根本原因となる。
関連トピック
XSS(クロスサイトスクリプティング)- 悪意あるスクリプトを Web ページに注入する攻撃手法。反射型・格納型・DOM Based の 3 種類がある。 反射型 XSS(Reflected XSS)- URL パラメータに含まれたスクリプトがサーバーのレスポンスに反映されて実行される攻撃。フィッシングメール経由で悪用されることが多い。 格納型 XSS(Stored XSS)- データベースに保存された悪意あるスクリプトが、他のユーザーがページを閲覧した際に実行される攻撃。影響範囲が広く、最も危険な XSS。 Content Security Policy (CSP)- ブラウザが読み込めるリソースの種類やオリジンを制限する HTTP ヘッダ。XSS の被害を大幅に軽減できる。 