概要

XSS(Cross-Site Scripting)は、攻撃者が悪意のあるスクリプトを正規のWebページに埋め込み、被害者のブラウザ上でスクリプトを実行させる脆弱性です。Cookie の盗取・フィッシング・キーロガーなど多様な攻撃に悪用されます。

仕組みと動作原理

XSSの3種類

反射型XSS(Reflected XSS)

攻撃者が用意した悪意のあるURLをユーザがクリックすることで発動。スクリプトはサーバを経由して反射される。

攻撃者 → 悪意のあるURL(スクリプト入りパラメータ)を被害者に送信
被害者 → URLをクリック
サーバ → URLパラメータをそのままレスポンスに埋め込んで返す
ブラウザ → スクリプトが実行される

特徴: 永続しない・URLに悪意のあるコードが含まれる・フィッシングメールとの組み合わせが多い

格納型XSS(Stored XSS)

攻撃スクリプトがDBやファイルに保存され、ページを閲覧する全ユーザに影響。

攻撃者 → 悪意のあるスクリプトをコメント欄等に投稿
DB → スクリプトを保存
被害者 → そのページを閲覧
ブラウザ → スクリプトが実行される

特徴: 永続的・多数のユーザに影響・管理者が感染するとさらに被害拡大

DOM型XSS

サーバを経由せず、クライアントサイドのJavaScriptがDOMを操作する際に発動。サーバのレスポンスには悪意のあるコードが含まれない。

// 脆弱なコード
document.getElementById('output').innerHTML = location.hash.substring(1);
// URL: https://example.com/#<script>alert(1)</script>

特徴: サーバログに残らないため検出困難・innerHTMLeval()document.write() が危険な操作

主な被害と攻撃パターン

攻撃説明
セッションハイジャックdocument.cookie でセッションCookieを盗取
フィッシング偽のログインフォームをページに挿入
キーロガーフォーム入力をリアルタイムに外部送信
マルウェア配布ページにドライブバイダウンロードを仕込む
CSRF トリガーXSSからCSRFリクエストを発火

対策

対策説明効果
出力時エスケープ<>&"' → HTMLエンティティに変換◎ 根本対策
CSP(Content Security Policy)スクリプト実行元を制限するHTTPヘッダ○ 軽減策
HTTPOnly CookieJavaScriptからCookieを読み取れなくする○ 被害限定(セッション盗取防止)
Secure CookieHTTPS通信のみCookieを送信
入力値検証想定外の入力を拒否△ 補完的(エスケープとの併用が必要)
DOMPurify等のサニタイザHTML入力を許可する場合の安全な処理

CSP(Content Security Policy)の例

Content-Security-Policy: default-src 'self'; script-src 'self' https://cdn.example.com
  • インラインスクリプト(<script>alert(1)</script>)を禁止
  • 許可されていないドメインからのスクリプト読み込みを防止

SC試験での頻出ポイント

  • 3種類の XSS の違いと被害:特に格納型 vs 反射型の区別
  • HTTPOnly 属性の目的:JavaScript から Cookie を読み取れなくする(セッション盗取防止)
  • CSP の役割:XSS が発火しても外部への情報送信を防ぐ深層防御
  • DOM型XSSのサーバ側対策の限界:サーバレスポンスには問題がないため、クライアント側コードのレビューが必要
  • 反射型XSSの配布方法:フィッシングメール・掲示板への悪意URLの投稿

よくある誤問・ひっかけパターン

誤り① 「HTTPOnly Cookie を設定すれば XSS を完全に防げる」→ 。HTTPOnly はセッション Cookie の盗取を防ぐだけで、XSS 自体は防げません(他の攻撃は可能)。

誤り② 「格納型 XSS は格納時に入力値をチェックすれば防げる」→ 不十分。入力時の検証ではなく、出力時のエスケープが根本対策です。

誤り③ 「DOM型 XSS はサーバサイドのエスケープで防げる」→ 。DOM型は JavaScript による DOM 操作に起因するため、クライアントサイドの安全な API(textContentsetAttribute 等)の使用が対策です。

関連用語

重要キーワード

用語説明
反射型XSSURLパラメータのスクリプトがサーバを通じて反射される型
格納型XSSスクリプトがDBに保存され閲覧者全員に影響する永続型
DOM型XSSJavaScriptのDOM操作に起因するクライアントサイドXSS
CSPスクリプト実行元を制限するHTTPレスポンスヘッダ
HTTPOnlyJavaScriptからCookieを読み取れなくする属性
出力エスケープ表示時にHTML特殊文字をエンティティに変換する根本対策