クロスサイトスクリプティング(cross site scripting)
- テクノロジ系
- セキュリティ
- 基本情報
- 応用情報
- 重要度 ★★★☆☆
入力をそのまま表示するサイトを踏み台にして、閲覧者のブラウザで命令を動かす攻撃。
もう少し詳しい説明
クロスサイトスクリプティングは、入力された文字をそのまま画面に出してしまうサイトを踏み台にして、そのサイトを見に来た人のブラウザで勝手な命令を動かす攻撃です。頭文字をとって XSS と書きます。
なぜ起きるのか
掲示板やレビュー欄など、利用者が書いた文字をそのまま画面に表示する仕組みは、どこにでもあります。
Webページは、文字と一緒に「ここからは命令だ」という印を書けるようになっています。もし投稿された文字をそのまま画面に流し込むと、投稿の中にその印が混ざっていた場合、ブラウザはそれを命令として実行してしまいます。
原因は、SQLインジェクションとまったく同じ形をしています。入力された文字を、ただの文字として扱っていない。違うのは、読み違えるのがデータベースではなく閲覧者のブラウザだという点です。
被害を受けるのは閲覧者
ここがこの攻撃のいちばん大事なところです。仕掛けられるのはサイトですが、被害を受けるのはそのサイトを見に来た利用者です。
- ログイン中であることを示すクッキーやセッションIDを盗まれ、なりすまされる
- 本物そっくりの偽の入力欄を表示され、パスワードやカード番号を入力させられる
- 気づかないうちに別のサイトへ飛ばされる
しかも命令が動くのは、利用者が信用している正規のサイトの画面の上です。アドレスバーには見慣れたサイトのアドレスが出ているので、利用者は疑いません。攻撃者のサイトへ誘い込むのではなく、信用されているサイトの中で動かす。そこが厄介な点です。
サイトの運営者から見ると、自社のデータが壊されるわけではないのに、利用者に被害を出してしまう。踏み台にされるという言い方がぴったりくる攻撃です。
対策:記号を、ただの文字として表示する
対策の考え方は、入力された文字を命令として読ませないことです。
画面に出すときに、命令の印として使われる記号を「見た目は同じだが、命令とは解釈されない書き方」に置き換えます。これがエスケープ処理(サニタイジング)です。こうしておけば、投稿にどんな記号が混ざっていても、画面にはそのままの文字として表示されるだけで、命令にはなりません。
この処理は、画面に出す直前に行うのが基本です。受け取った時点で書き換えてしまうと、元のデータが何だったか分からなくなり、別の場所で使うときに困ることがあるためです。
合わせて問われる備えもあります。
| 対策 | 何をするか |
|---|---|
| エスケープ処理 | 命令の印になる記号を、ただの文字として表示する。根本対策 |
| クッキーの HttpOnly 属性 | スクリプトからクッキーを読めなくし、盗まれにくくする |
| 入力値の検証 | 想定外の形式の入力を受け付けない。補助として |
| WAF | 怪しい通信を手前で遮る。保険であって根本対策の代わりではない |
名前の似ている攻撃と区別する
クロスサイトリクエストフォージェリ(CSRF)という、名前のよく似た攻撃があります。これは、ログイン中の利用者に意図しない操作を送信させる攻撃で、スクリプトを実行させるXSSとは仕組みが別です。試験では並べて出されるので、区別しておいてください。
試験ではこう出る
科目A(旧・午前)のセキュリティ分野で出ます。多いのは、攻撃の説明を示して名前を選ばせる形と、対策として適切なものを選ばせる形です。SQLインジェクション、クロスサイトリクエストフォージェリ、セッションハイジャックなどと並べて、どれがどの攻撃の説明かを振り分けさせる問題が定番です。応用情報では、対策をどの層で行うか(表示するとき・受け取るとき・通信するとき)まで踏み込みます。
見分けるコツは、誰が、どこで被害を受けるかを先に読むことです。サーバのデータベースが狙われていればSQLインジェクション、閲覧者のブラウザで何かが動いていればクロスサイトスクリプティング、利用者が知らないうちに何かを送信させられていればクロスサイトリクエストフォージェリ。攻撃名を丸暗記するより、この3点で振り分けるほうが確実です。
関連する用語
- SQLインジェクション
- 入力をそのまま扱うのが原因という点は同じ。ただし狙われるのはサーバのデータベース
- エスケープ処理
- 記号をただの文字として表示させる処理。この攻撃の基本的な対策
- セッションID
- ログイン中の利用者を見分けるための番号。盗まれるとなりすまされる
- クッキー
- ブラウザに保存される小さなデータ。セッションIDの保管によく使われる
- クロスサイトリクエストフォージェリ
- 利用者に意図しない操作を送信させる攻撃。名前が似ているが仕組みは別
- WAF
- Webへの通信を見て怪しいものを遮る仕組み。保険であって根本対策ではない
ミニクイズ
クロスサイトスクリプティングによって直接的な被害を受けるのは誰か、また被害が起こる場所はどこか。最も適切なものはどれか。
正解は 3番:脆弱なサイトを閲覧した利用者が、自分のブラウザ上で被害を受ける
この攻撃で命令が動くのは、脆弱なサイトを見に行った利用者のブラウザです。攻撃者が仕掛けるのはサイトのほうですが、そのサイト自体のデータが壊されるわけではなく、閲覧した人のクッキーやセッションIDが盗まれたり、偽の入力欄を表示されたりします。サイトは踏み台にされている、という位置づけです。サーバ上のデータベースが直接狙われるのはSQLインジェクションのほうです。また、命令が動くのは攻撃者のサイトではなく、あくまで信用されている正規のサイトの画面上なので、利用者は気づきにくくなります。
最終更新:2026-09-15