XSS(クロスサイトスクリプティング)とは?
クロスサイトスクリプティング、またはXSSは、攻撃者が有害なスクリプトをウェブページに追加できるウェブサイトのセキュリティ欠陥です。ほとんどの場合、これらのスクリプトはJavaScriptで書かれています。
XSSの影響を受けたページを誰かが訪れると、その人のブラウザは攻撃者のスクリプトを実行します。これにより、クッキーの盗難、セッションの乗っ取り、またはユーザーの許可なしに行われるアクションが発生する可能性があります。
XSSは、SQLインジェクションのように、OWASP Top 10に定期的にリストされる最も一般的なウェブアプリケーションの脆弱性の一つです。

XSSの仕組みは?
XSSは、ユーザー入力を正しくチェックおよびクリーンアップしないウェブアプリケーションを狙うことがよくあります。
例えば、コメントボックスが生のHTMLやJavaScriptをフィルタリングなしで許可する場合、攻撃者は次のようなコードを追加することができます:
<script>alert('Hacked!');</script>
被害者がページを表示すると、悪意のあるコードがその人のブラウザ内で実行されます。
サイバーセキュリティにおけるXSSの重要性
XSSはより大きな侵害につながる可能性があります:
- アカウント乗っ取り(セッションクッキーを盗んでユーザーになりすます)
- データ窃盗(パスワードやクレジットカードのようなフォーム入力を捕捉)
- フィッシング攻撃(偽のログインフォームを注入)
- マルウェア配信(ユーザーを悪意のあるウェブサイトにリダイレクト)
XSSの種類
- DOMベースのXSS
- 攻撃は完全にブラウザ内で、サーバーを介さずにDocument Object Model(DOM)を操作することで発生します。
- 保存型XSS
- 悪意のあるスクリプトがデータベースやプロフィールページなどのサーバーに永久に保存されます。
- 反射型XSS
- スクリプトがウェブサーバーから反射され(例:URLやエラーメッセージ)、被害者が攻撃者によって作成されたリンクをクリックするとスクリプトが実行されます。
XSSを防ぐ方法
- 入力のサニタイズと出力エンコーディング:ユーザー入力データを処理する前に常にクリーニングし、安全な形式に変換する
- コンテンツセキュリティポリシー(CSP)の使用:ブラウザで実行できるスクリプトを制限する
- eval()とインラインJavaScriptを避ける:注入リスクを減らすため
- セキュリティテスト(DAST/IAST):脆弱性を早期に検出するためにセキュリティテストを実行する
実際のケースでの例 - Samyワーム(MySpace, 2005)
何が起こったか: Samy Kamkarは、ストアドXSSペイロードを含むMySpaceプロフィールを公開しました。他のユーザーがそのプロフィールを閲覧すると、ペイロードが彼らのブラウザで実行され、(a) Samyを友達に追加し、(b) 彼らのプロフィールに「Samy is my hero」というフレーズを追加し、(c) そのユーザーのプロフィールページに自己複製しました。
影響: このワームは約20時間以内に約100万人のユーザーに自己伝播し、MySpaceを一時的にオフラインにしました。
なぜ機能したのか: MySpaceはプロフィールフィールドでエスケープされていないHTML/属性を許可しており、訪問者のブラウザでのスクリプト実行を可能にしていました。
教訓/修正: 適切な出力エンコーディング、入力のサニタイズ、プロフィールフィールドでのHTMLの削除、迅速なパッチ適用。Samyは後に法的な結果に直面し、MySpaceはフィルターを導入しました。
関連用語
- SQLインジェクション
- DAST (動的アプリケーションセキュリティテスト)
- OWASPトップ10
- CSRF (クロスサイトリクエストフォージェリ)