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(クロスサイトリクエストフォージェリ)