応用情報技術者 2013年 秋期 午前2 問42
問題文
クロスサイトスクリプティングの手口はどれか。
選択肢
ア:Webアプリケーションに用意された入力フィールドに、悪意のある JavaScript コードを含んだデータを入力する。(正解)
イ:インターネットなどのネットワークを通じてサーバに不正にアクセスしたり、データの改ざん・破壊を行ったりする。
ウ:大量のデータを Webアプリケーションに送ることによって、用意されたバッファ領域をあふれさせる。
エ:パス名を推定することによって、本来は認証された後にしかアクセスが許可されていないページに直接ジャンプする。
🔒 解説は解答すると表示されます
クロスサイトスクリプティング【午前2解説】
正解の理由
問題の選択肢のうち、Webアプリケーションの入力欄に悪意ある JavaScript を含むデータを入れる動作を示すのが、クロスサイトスクリプティング(XSS)攻撃です。したがって ア が正解です。XSS はユーザのブラウザ上で攻撃者が注入したスクリプトを実行させ、セッション情報の窃取、画面改ざん、フィッシングなどを引き起こします。他の選択肢は不正アクセス(イ)、バッファオーバーフロー(ウ)、アクセス制御の欠陥による強制ブラウジング/IDOR(エ)など別種の攻撃であり、XSS とは性質が異なります。
解法ステップ
- 問題文で「JavaScript」「入力フィールド」「実行」などクライアント側スクリプトの注入を示す語句があるか確認する。あれば XSS を疑う。
- 各選択肢を「どのレイヤ/どこで被害が発生するか」で分類する:
- ブラウザ上でのスクリプト実行 → XSS
- ネットワーク越しの不正アクセスや改ざん → 不正アクセス(侵入)
- 大量データでメモリを上書き → バッファオーバーフロー
- URL 推測で認証外ページに行く → 強制ブラウジング/IDOR(アクセス制御欠陥)
- 最も一致する選択肢を選ぶ(本問は上記の通り ア)。
選択肢別の誤答解説
-
ア: 正解。入力欄に悪意あるスクリプトを送り、それがそのまま出力されてブラウザで実行される典型的な XSS の説明です。XSS には主に「ストアド(保存型)」「リフレクト(反射型)」「DOM ベース」の3種類があります。例:入力に
<script>alert('XSS')</script>を含め、出力時にエスケープされずにそのまま表示されると実行されます。 -
イ: 誤り。ネットワークを通じてサーバに不正アクセスしたりデータを改ざん・破壊する行為は一般に不正侵入や改ざん攻撃(例:不正アクセス、改ざん、マルウェア等)であり、XSS の説明とは異なります。XSS は主にクライアント側(ブラウザ)でスクリプトが実行される点が特徴です。
-
ウ: 誤り。大量データでバッファをあふれさせるのはバッファオーバーフロー攻撃で、メモリ破壊や任意コード実行を狙います。これはサーバやネイティブアプリ側のメモリ管理の問題に起因し、ブラウザでのスクリプト注入を狙う XSS とは異なります。
-
エ: 誤り。提示文の「パス名を推定して認証後のページに直接ジャンプする」は、ディレクトリトラバーサルとは異なり、正しくは「強制ブラウジング(URL 推測による直接アクセス)」や「直接オブジェクト参照の不備(IDOR)/認証バイパス」に該当します。これはアクセス制御の欠陥により発生する問題であり、XSS のスクリプト注入とは性質が違います。
よくある誤解
- XSS をサーバ側の侵入攻撃と混同する:XSS は攻撃が成功すると被害は主にユーザのブラウザ側で発生します(ただし最終的にサーバ情報が盗まれる場合もある)。不正アクセス(イ)と混同しないこと。
- 「スクリプトが埋め込まれる=必ず攻撃になる」と考える誤解:スクリプトが埋め込まれても、適切な出力エスケープや CSP により実行が防げます。
- 入力検証だけで十分と考える誤解:XSS 対策は入力検証に加え、出力時のエスケープ/エンコーディングや CSP、HttpOnly クッキーなど多層的対策が必要です。
補足コラム
-
XSS の種類と簡単な見分け方
- リフレクト(反射型):リクエストに含めた悪性スクリプトがレスポンスに反映され即座に実行される。検索結果やエラーメッセージでよく発生。
- ストアド(保存型):悪性スクリプトがサーバに保存され、複数の利用者に配信されて実行される(掲示板やコメント機能で危険)。
- DOM ベース:レスポンス生成時ではなく、クライアント上の DOM 操作でスクリプトが実行される。
-
代表的対策(実践的優先度順)
- 出力エスケープ(HTML エンティティ化)— どのコンテキスト(HTML、属性、JavaScript、URL)かに応じて適切にエンコードする。
- コンテンツセキュリティポリシー(CSP)で実行可能なスクリプトソースを制限する。
- HttpOnly/Secure/SameSite を用いたクッキー保護。
- 信頼できるサニタイズライブラリの利用(例:DOMPurify)。
-
簡単な例(ブラウザ側でのサニタイズ使用例)
// DOMPurify を用いて、ユーザ入力を安全に挿入する例
const dirty = "<img src=x onerror=alert('XSS')>";
const clean = DOMPurify.sanitize(dirty);
document.getElementById("output").innerHTML = clean;
FAQ
Q1: XSS と SQL インジェクションはどう違いますか?
A1: XSS はブラウザでのスクリプト実行を狙う攻撃で、主にユーザを標的にします。SQL インジェクションはデータベースを直接操作・改ざんする攻撃でサーバ側の脆弱性を突きます。目的と発生箇所が異なります。
A1: XSS はブラウザでのスクリプト実行を狙う攻撃で、主にユーザを標的にします。SQL インジェクションはデータベースを直接操作・改ざんする攻撃でサーバ側の脆弱性を突きます。目的と発生箇所が異なります。
Q2: クッキーに HttpOnly を付ければ XSS の被害は完全に防げますか?
A2: HttpOnly は JavaScript からのクッキー取得を防ぎますが、画面の改ざんや CSRF 促進など XSS が引き起こす他の被害は防げないため多層対策が必要です。
A2: HttpOnly は JavaScript からのクッキー取得を防ぎますが、画面の改ざんや CSRF 促進など XSS が引き起こす他の被害は防げないため多層対策が必要です。
Q3: 試験で見分けるコツは?
A3: 「ブラウザで実行されるスクリプトの注入」を示す語句があれば XSS を疑う。逆に「大量データで領域を溢す」「不正アクセスしてサーバに侵入」「URL を推測して未認証ページへ移動」などは別問題。
A3: 「ブラウザで実行されるスクリプトの注入」を示す語句があれば XSS を疑う。逆に「大量データで領域を溢す」「不正アクセスしてサーバに侵入」「URL を推測して未認証ページへ移動」などは別問題。
関連キーワード: クロスサイトスクリプティング, XSS, ストアドXSS, リフレクトXSS, DOMベースXSS, 出力エスケープ, CSP, HttpOnly, 強制ブラウジング, IDOR, バッファオーバーフロー, 不正アクセス, サニタイズ, DOMPurify

\ せっかくなら /
応用情報技術者を
クイズ形式で学習しませんか?
クイズ画面へ遷移する→
すぐに利用可能!

