DOM型XSS
攻撃コードがサーバーを一切通らないXSSの一種。脆弱なクライアント側JavaScriptがURLのハッシュやlocalStorageなどの入力を読み、無害化せずに実行・挿入してしまう。
典型例は document.getElementById('container').innerHTML = location.hash で、URLが #<img onerror=alert(1) src=x> なら発火する。攻撃はクライアント側で完結するため、出力時のエスケープといったサーバー側の対策は効かない。対策は innerHTML を避けて textContent を使うこと、DOM操作の前にユーザーデータをエスケープすること、そして安全な書き方を強制するChromeのAPI「Trusted Types」である。ReactやVueはJSXの自動エスケープでリスクを抑える。描画がすべてクライアント側にあるSPAは、DOM型XSSの攻撃面がそれだけ広い。最良の緩和策はCSPで、'unsafe-eval' を無効にしnonceでスクリプトを許可する。