1.はじめに
過去2回の記事では、Cookieとセッションについてまとめました。その記事内でセッションIDが盗まれると危険…という話も少し触れましたが、その代表的な攻撃手法が XSS(クロスサイトスクリプティング) です。各種セキュリティの資格試験などでもおなじみの攻撃ですね。
本記事では、XSSとは何か、どのような仕組みで攻撃が成立するのか、どう防ぐべきかをまとめます。
※本投稿は、2026年3月時点の情報、及び、あくまで一個人のメモ書きと思ってお読みください
2.XSS(クロスサイトスクリプティング)とは?
XSS(クロスサイトスクリプティング) とは、 攻撃者が用意した悪意あるスクリプト(主にJavaScript)を、ユーザーのブラウザ上で実行させる攻撃 のことです。
Webアプリケーションがユーザーからの入力を適切に検証せずにそのまま表示すると、攻撃者は「script」タグなどの悪意あるコードを入力欄に紛れ込ませることができます。これにより、ユーザーのブラウザ上で意図しないスクリプトが勝手に実行されてしまいます。
結果として、セッションIDの盗難、偽フォームの表示、勝手な操作などが可能になります。
ちなみにスペルが「Cross-Site Scripting」なのに「XSS」と記載をするのは、「Cascading Style Sheets」と混同しないように、という理由からです。このパターンで代わりに「X」を使うのはなんかカッコイイですよね。
3.XSSが起きる仕組み
XSSが成立する典型的な流れは次の通りです。
- 攻撃者が悪意あるスクリプトを含む入力を送信
- Webアプリがその入力を適切に無害化せず、画面にそのまま表示
- ユーザーがそのページを閲覧
- ユーザーのブラウザで攻撃者のスクリプトが実行
- セッションIDの盗難、偽ページへの誘導、勝手な操作などが行われる
特に「掲示板」「コメント欄」「プロフィール編集画面」など、ユーザー入力を画面に表示する機能 はXSSの温床になりやすいです。
4.XSSの種類
XSSは、大きく分けて3種類あります。それぞれの特徴は、次の通りです。
| 種類 | 特徴 |
|---|---|
| 反射型 | URLに仕込んだスクリプトが即座に実行されるXSS |
| 蓄積型 | DBに保存されたスクリプトが閲覧者に対して実行されるXSS |
| DOM-based XSS | JavaScriptのDOM操作が原因で発生するクライアント側のXSS |
特に蓄積型は掲示板やSNSなどで多くのユーザーに影響が及ぶため、被害が大きくなりやすいです。
5.XSSで何ができてしまうのか
XSSが成立すると、攻撃者はユーザーのブラウザ上で自由にJavaScriptを実行できます。被害の代表例は次の通りです。
- セッションIDの盗難
→ セッションハイジャックされる(ログイン状態を乗っ取られる) - 偽のログインフォームを表示
→ パスワードを盗まれてしまう - ユーザーの代わりに勝手に操作
→ SNSで勝手に投稿、ECサイトで勝手に購入などをされる - ブラウザ内の情報を外部に送信
→ Cookie、画面内容、入力中の情報などを送信される
セッションの記事でも触れましたが、セッションIDが盗まれるとログイン状態を完全に奪われるため、危険です。
6.XSSを防ぐには?
XSSは主にWebアプリケーション開発者側で実施する必要があります。主な対策は次の通りです。
- エスケープ処理(HTMLエスケープ)
→ ユーザー入力を画面に表示する際は、「<」や「>」を「<」や「>」に変換するなど、HTMLとして解釈されないようにする。 - Content Security Policy(CSP)の設定
→ 外部スクリプトの読み込み制限や、インラインスクリプトの禁止などを設定する。 - HTTPOnly Cookieの利用
→ セッションIDをJavaScriptから参照できないようにする。 - 不要なHTMLを許可しない
→ Markdownやリッチテキストを扱う場合は、許可するタグを厳密にホワイトリスト化する。
7.おわりに
XSSは、Webアプリケーションの脆弱性の中でも特に危険度が高く、セッションIDの盗難やユーザー操作の乗っ取りにつながる深刻な攻撃です。利用者側でも不審なURLにはアクセスしないなど注意をする必要がありますね。
ありがとうございました!