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の削除、迅速なパッチ適用。サミーは後に法的な結果に直面し、MySpaceはフィルターを展開しました。
関連用語
- SQLインジェクション
- DAST (動的アプリケーションセキュリティテスト)
- OWASPトップ10
- CSRF (クロスサイトリクエストフォージェリ)