クロスサイトスクリプティング(XSS)とは?
Cross-site scripting(XSS)とは、Webアプリケーションに悪意あるスクリプトを埋め込み、閲覧者のブラウザ上で実行させる攻撃手法です。
本来ユーザー入力は安全に処理されるべきですが、適切なエスケープ処理が行われていないと、攻撃者が仕込んだJavaScriptが実行されてしまいます。
その結果、ログイン情報やセッション情報の窃取、フィッシング画面への誘導などが可能になります。
XSSの主な種類と危険性
① Reflected XSS(反射型XSS)
反射型XSSは、URLパラメータやフォーム入力値などがそのままページに表示される場合に発生します。
攻撃者は悪意あるスクリプトを含むURLを作成し、それをメールやSNSで拡散します。
ユーザーがそのURLをクリックすると、サーバーがその値をそのまま出力し、ブラウザでスクリプトが実行されます。
主な被害
- セッションIDの盗難
→ ログイン状態をそのまま奪われる可能性があります。 - フィッシングページへの自動リダイレクト
→ 本物そっくりのログイン画面へ誘導されることがあります。 - ブラウザ内での情報抜き取り
→ 入力フォームの情報を盗まれるケースもあります。
反射型は「クリックさせる」必要がありますが、標的型メールと組み合わさると非常に危険です。
② Stored XSS(保存型XSS)
保存型XSSは、掲示板・コメント欄・プロフィール欄などに悪意あるスクリプトが保存されるタイプです。
一度保存されると、そのページを閲覧するすべてのユーザーに影響が及びます。
企業サイトやECサイトでは特に危険度が高い攻撃です。
主な被害
- 管理者アカウントの乗っ取り
→ 管理画面閲覧時にスクリプトが実行される可能性があります。 - サイト改ざん
→ 攻撃者が権限を取得するとページが書き換えられます。 - マルウェア配布
→ 閲覧者に不正ファイルをダウンロードさせるケースもあります。
保存型XSSは「拡散力」が強いため、実務では最も警戒すべきタイプです。
③ DOM Based XSS(DOM型XSS)
DOM型XSSは、サーバーではなくクライアント側のJavaScript処理に起因します。
例えば、URLのハッシュ値(#以降)をJavaScriptで読み取り、そのままHTMLへ出力してしまう場合などです。
主な被害
- ブラウザ内部での情報漏洩
- フロントエンドフレームワークへの影響
- SPA(Single Page Application)での大規模被害
近年はReactやVueなどの利用増加に伴い、DOM型XSSの対策も重要になっています
最近報告されたXSS関連の事例(2024〜2025)
XSSは「古い脆弱性」と言われがちですが、現在も多数報告されています。
■ 医療系システムでの反射型XSS
医療画像管理システムでURL操作によりJavaScriptが実行可能となる事例が報告されました。
医療機関では個人情報が多く扱われるため、被害が拡大するリスクがあります。
■ ファイル同期ソフトでの保存型XSS
ログ表示機能においてスクリプトが保存され、管理者画面で実行される脆弱性が確認されました。
管理者権限奪取につながる可能性があります。
■ 管理コンソールの反射型XSS
ネットワーク機器の管理画面で、認証済ユーザーに対するXSSが報告されました。
内部ネットワークでも攻撃が成立する可能性があります。
→ これらの事例から分かる通り、業界・製品を問わず発生しているのが現状です。
実際の攻撃手口(複合攻撃)
現在のXSSは単独ではなく、他の攻撃と組み合わせられるケースが増えています。
XSS + セッションハイジャック
スクリプトでCookieを盗み、そのままログイン状態を奪取。
XSS + CSRF
管理者が気づかないうちに設定変更や送金処理を実行。
XSS + フィッシング
正規サイト内に偽ログインフォームを表示させる。
このように「踏み台化」されることで被害が拡大します。
XSSの具体的な対策
① 入力値の検証(バリデーション)
ユーザーが入力した値をそのまま信用せず、
「許可された形式のみ受け入れる」ホワイトリスト方式が推奨されます。
例:
- メールアドレス形式のみ許可
- HTMLタグは除外
② 出力時のエスケープ処理
HTMLへ出力する際に、
<→<>→>
のように無害化することで、スクリプトとして解釈されないようにします。
XSS対策は「入力時」よりも「出力時」が重要と言われています。
③ Content Security Policy(CSP)の導入
CSPは、どのスクリプトを実行してよいかをブラウザに指示する仕組みです。
例えば、
- 外部スクリプトの実行を禁止
- インラインスクリプトを禁止
といった制御が可能になります。
多層防御の観点から非常に有効です。
④ HTTPOnly属性の利用
CookieにHTTPOnly属性を付与することで、JavaScriptからの取得を防止できます。
これにより、セッションIDの盗難リスクを軽減できます。
⑤ 定期的な脆弱性診断
- CMSのアップデート
- プラグイン更新
- 外部診断サービスの活用
特に企業サイトでは年1回以上の診断が推奨されます。
なぜXSSは減らないのか?
- 古いシステムの放置
- 独自開発部分の検証不足
- フロントエンド開発の複雑化
特にCMSカスタマイズやフォーム実装部分で発生しやすい傾向があります。
まとめ
- XSSは今もなお頻発する脆弱性
- 保存型XSSは特に危険
- 入力検証+出力エスケープ+CSPの多層防御が重要
- CMS運用者も他人事ではない
FAQ(検索結果改善用)
Q1. XSS攻撃でどんな被害が出る?
→ セッション乗っ取り、アカウント情報盗難、フィッシング、マルウェア配布など幅広い。
Q2. XSSは古い脆弱性じゃないの?
→ 2025年でもMSRCが多数対応しており、依然トップクラス。
Q3. 自分のサイトでも起きる?
→ 入力値を表示する全てのWebアプリに可能性あり。対策必須。
