攻撃を試す コマ13

DOMベースXSS

サーバーは無関係。ブラウザ上のJavaScriptが、URLのフラグメント (#以降・サーバーには送られない)を innerHTML に入れることで XSSが成立する。サーバー側では検知も対策もできない。

攻撃例: URLの末尾に #<img src=x onerror=alert(1)> を付けて開く。

脆弱版(innerHTML)

商品ID: (#以降を読み込みます)

対策版(textContent)

商品ID: (#以降を読み込みます)

いまのフラグメント


innerHTML は文字列をHTMLとして解釈する(=タグが動く)。 textContent は常にただの文字として扱う。ユーザー由来のデータは textContent で入れるのが基本。どうしてもHTMLが必要ならサニタイズする。

あなたの座席ID: 8cd870c36860 この演習をリセット 演習一覧へ