ITパスポート 2012年 春期 問77
問題文
クロスサイトスクリプティングとは、Webサイトの脆弱性を利用した攻撃である。クロスサイトスクリプティングに関する記述として、適切なものはどれか。
選択肢
ア:Webページに、ユーザの入力データをそのまま表示するフォーム又は処理があるとき、第三者が悪意あるスクリプトを埋め込むことでクッキーなどのデータを盗み出す。(正解)
イ:サーバとクライアント間の正規のセッションに割り込んで、正規のクライアントに成りすますことで、サーバ内のデータを盗み出す。
ウ:データベースに連携しているWebページのユーザ入力領域に悪意あるSQLコマンドを埋め込み、サーバ内のデータを盗み出す。
エ:電子メールを介して偽のWebサイトに誘導し、個人情報を盗み出す。
🔒 解説は解答すると表示されます
クロスサイトスクリプティングに関する記述【ITパスポート 解説】
正解の理由
選択肢の中で正しい説明は ア です。クロスサイトスクリプティング(XSS:クロスサイトスクリプティング)は、Webサイトの脆弱性を突いて「悪意あるスクリプト(JavaScriptなど)」をページに埋め込み、閲覧しているユーザのブラウザ上でそのスクリプトを実行させる攻撃です。結果として、クッキー(cookie:ウェブサイトがブラウザに保存する小さなデータ)やセッション情報などを盗み出したり、利用者になりすまして不正な操作を行わせたりできます。選択肢アは「ユーザ入力をそのまま表示 → 第三者が悪意あるスクリプトを埋め込む → クッキーなどを盗む」と、XSSの典型的な流れを正しく示しています。
解法ステップ
- 問題文でキーワードを探す:「悪意あるスクリプト」「ユーザの入力データをそのまま表示」「クッキーを盗む」などがXSSの典型表現です。
- 各選択肢の攻撃手法を判別する:
- スクリプトを使ってブラウザで実行される攻撃ならXSS。
- データベースにSQLの命令を送るならSQLインジェクション(別物)。
- セッションに割り込んで成りすますのはセッションハイジャックや中間者攻撃(別物)。
- 偽メールで誘導するのはフィッシング(別物)。
- キーワードが一致する選択肢を選ぶ。今回なら ア。
選択肢別の誤答解説
-
ア(正答の内容を補足)
ユーザ入力を無加工でページに出力すると、攻撃者が入力欄に<script>…</script>のようなコードを入れ、閲覧者のブラウザで実行させられます。これがXSSです。 -
イ(誤り)
「サーバとクライアント間の正規のセッションに割り込んで成りすます」はセッションハイジャック(session hijacking)や中間者攻撃(Man-in-the-Middle:中間者)に該当します。XSSはブラウザ上でスクリプトを実行させる攻撃で、直接「セッションを割り込む」ことを主目的にする記述とは異なります。 -
ウ(誤り)
「Webページのユーザ入力領域に悪意あるSQLコマンドを埋め込み」はSQLインジェクション(SQL Injection)です。これはデータベースに対する攻撃で、XSSとは攻撃対象と手法が違います。 -
エ(誤り)
「電子メールを介して偽のWebサイトに誘導する」はフィッシング(Phishing:偽サイトに誘導して情報を盗む)です。XSSと手段・目的が異なります。
よくある誤解
-
「XSSはサーバを壊す攻撃だ」
誤りです。XSSは主に利用者(ブラウザ)を犠牲にする攻撃で、サーバ側を直接破壊するわけではありません。ただし結果として不正操作によりサーバ内データが盗まれる場合もあります。 -
「CookieにHttpOnlyを付ければXSSの被害は完全になくなる」
HttpOnlyはJavaScriptからクッキーを読み取れなくする有効な対策ですが、XSSは他の不正操作(偽フォーム送信や画面上での不正表示など)も可能です。HttpOnlyは重要ですが単独で完全な防御にはなりません。 -
「XSS と SQLインジェクションは同じ」
似た“入力を悪用する”攻撃ですが、対象と手法が違います。XSSはブラウザ上でスクリプト実行、SQLインジェクションはデータベースへの不正命令です。
補足コラム
XSSの主な種類(短く)
- Stored XSS(永続型): 攻撃コードがサーバに保存され、閲覧者全員に配信される。掲示板やコメント欄で危険。
- Reflected XSS(反射型): 攻撃コードがURLなどに含まれ、リンクを踏んだ人のブラウザで即実行される。メールや検索結果のリンクで見られる。
- DOM-based XSS(DOM 型): ブラウザ側のスクリプトがURLやページ内データを不適切に扱うことで発生する。サーバ側の処理を経ないタイプ。
主な対策(実務で押さえるべき順序)
- 出力時のエスケープ(サニタイズではなく、表示目的に応じた適切なエスケープ)
- 入力バリデーション(許可する文字や形式を限定)
- コンテンツセキュリティポリシー(CSP:Content Security Policy)による外部スクリプト制限
- Cookie に HttpOnly、Secure、SameSite 属性を付与することで、JSからの読み取りやクロスサイト送信を抑制
簡単なコード例(ブラウザ側での違い)
脆弱(innerHTMLでそのまま挿入):
<!-- ユーザ名をそのまま挿入する脆弱な例 -->
<div id="welcome"></div>
<script>
// URLのパラメタ ?name=... を取り出してそのままHTMLに挿入(危険)
const params = new URLSearchParams(location.search);
const name = params.get('name') || 'ゲスト';
document.getElementById('welcome').innerHTML = 'ようこそ、' + name;
</script>
安全(textContent を使う、または適切にエスケープ):
<div id="welcome"></div>
<script>
const params = new URLSearchParams(location.search);
const name = params.get('name') || 'ゲスト';
// textContent はタグを文字列扱いにするのでスクリプト挿入を防げる
document.getElementById('welcome').textContent = 'ようこそ、' + name;
</script>
FAQ
Q1: クッキーが盗まれると何が起きますか?
A1: クッキーにログイン情報やセッションIDが入っていると、盗まれた第三者がそのアカウントになりすまして操作できる可能性があります。サイトによっては個人情報や資産が危険にさらされます。
A1: クッキーにログイン情報やセッションIDが入っていると、盗まれた第三者がそのアカウントになりすまして操作できる可能性があります。サイトによっては個人情報や資産が危険にさらされます。
Q2: XSSは自分のサイトのユーザだけが被害にあうのですか?
A2: 被害者はそのサイトを閲覧するユーザです。つまり、あなたのサイトの利用者全員に影響があります。攻撃者が悪意ある投稿を保存してしまえば複数のユーザが被害にあいます。
A2: 被害者はそのサイトを閲覧するユーザです。つまり、あなたのサイトの利用者全員に影響があります。攻撃者が悪意ある投稿を保存してしまえば複数のユーザが被害にあいます。
Q3: どうやって勉強すればいいですか?
A3: まずは「出力時のエスケープ」と「入力のバリデーション」の概念を理解してください。実務ではライブラリやフレームワークが用意するエスケープ関数を使うのが一般的です。セキュリティ関連は手を動かして脆弱と安全の違いを確認すると覚えやすいです。
A3: まずは「出力時のエスケープ」と「入力のバリデーション」の概念を理解してください。実務ではライブラリやフレームワークが用意するエスケープ関数を使うのが一般的です。セキュリティ関連は手を動かして脆弱と安全の違いを確認すると覚えやすいです。
関連キーワード: クロスサイトスクリプティング、XSS、Stored XSS、Reflected XSS、DOM-based XSS、CSP(Content Security Policy:コンテンツセキュリティポリシー)、HttpOnly、SameSite、エスケープ、サニタイズ、SQLインジェクション、セッションハイジャック、フィッシング、セキュリティ対策、スクリプトインジェクション

\ せっかくなら /
ITパスポートを
クイズ形式で学習しませんか?
クイズ画面へ遷移する→
すぐに利用可能!

