情報処理安全確保支援士 2025年 秋期 午前2 問16
問題文
クロスサイトリクエストフォージェリ攻撃の対策として、効果がないものはどれか。
選択肢
ア:Webサイトでの決済などの重要な操作の都度、利用者のパスワードを入力させる。
イ:Webサイトへのログイン後、HTTPレスポンスボディに含めた秘密の値と、Webブラウザから送付される値とを、Webサーバ側で照合する。
ウ:Webブラウザからのリクエスト中のRefererによって正しいリンク元からの遷移であることを確認する。
エ:WebブラウザからのリクエストをWebサーバで受け付けた際に、リクエストに含まれる“<“、“>”などの特殊文字を、“<“、“>”などの文字列に置き換える。(正解)
##: クロスサイトリクエストフォージェリ攻撃の対策として、効果がないものはどれか。【午前2 解説】
要点まとめ
- 結論:Webサーバでリクエスト中の“<”、“>”などを“<”、“>”に置換する対策はXSS対策であり、CSRF防御には効果がない。
- 根拠:CSRFは利用者の認証済みブラウザを利用して正規のリクエストを偽造する攻撃で、出力エスケープではリクエスト生成自体を止められない。
- 差がつくポイント:CSRF対策は「一意で予測不可なトークン照合」「Referer/Origin確認」「再認証」「SameSite属性」などを組合せることが重要。
正解の理由
正解は エ です。
エの「リクエストに含まれる特殊文字を置換する」処理は、受け取ったデータを表示する際にスクリプト挿入を防ぐための出力エスケープ(XSS対策)です。CSRFはユーザのブラウザが認証情報(クッキー等)を自動で付与した正当なリクエストを第三者サイトが強制的に送らせる攻撃であり、サーバ側の出力時の文字置換はリクエストの送信を防げません。
対して、ア(再認証)、イ(レスポンスに含めた秘密値と照合する=CSRFトークン)、ウ(Refererチェック)はCSRF発生経路を直接検査または妨げるため有効性があります。
エの「リクエストに含まれる特殊文字を置換する」処理は、受け取ったデータを表示する際にスクリプト挿入を防ぐための出力エスケープ(XSS対策)です。CSRFはユーザのブラウザが認証情報(クッキー等)を自動で付与した正当なリクエストを第三者サイトが強制的に送らせる攻撃であり、サーバ側の出力時の文字置換はリクエストの送信を防げません。
対して、ア(再認証)、イ(レスポンスに含めた秘密値と照合する=CSRFトークン)、ウ(Refererチェック)はCSRF発生経路を直接検査または妨げるため有効性があります。
よくある誤解(2〜3 行)
出力エスケープを施していればすべてのウェブ攻撃を防げると考えられがちですが、XSS対策とCSRF対策は目的が異なり互換性がありません。
またRefererチェックは有効ですが、プロキシやプライバシー設定で欠落する場合がある点に注意が必要です。
またRefererチェックは有効ですが、プロキシやプライバシー設定で欠落する場合がある点に注意が必要です。
解法ステップ
- 問題の問いを確認:「CSRF対策として効果がないもの」を選ぶ。
- 各選択肢が何を防ぐ技術かを整理する(再認証/トークン/Referer/出力エスケープ)。
- CSRFの本質(認証済みブラウザからの正規リクエストの偽装)と照らし合わせる。
- 出力エスケープはリクエストの生成を阻止しないため、これが「効果がない」選択肢と判断する。
選択肢別の誤答解説
- ア: Webサイトで重要操作の都度パスワード入力を要求する。
- 有効性:高い。攻撃者は利用者のパスワードを知らないためCSRFを成立させにくい。UX負荷は高いが堅牢。
- イ: ログイン後にレスポンスボディに含めた秘密値とブラウザ送付値をサーバで照合する(CSRFトークン)。
- 有効性:標準的で有効。トークンはセッション関連付けや予測不可能性が重要。トークンはHiddenフォームやヘッダで送る。
- ウ: リクエスト中のRefererでリンク元を確認する。
- 有効性:ある程度有効。Originヘッダの方が信頼性高い場合があるが、Refererが消えるケース(プロキシ・プライバシー)に注意。
- エ: リクエスト受信時に“<”、“>”などを“<”、“>”に置換する。
- なぜ誤りか:これは出力時のエスケープであり、受信した正規のPOST/GETを攻撃と区別して拒否する手段ではない。CSRFの根本対策にならない。
補足コラム(関連知識など)
- SameSite 属性:Set-Cookie に SameSite=Lax/Strict を付与するとクロスサイト送信時のクッキー送信を制限でき、CSRF軽減に非常に有効です。
- Origin ヘッダ:POSTなどで送られる場合、Refererより改変されにくく検証に使える。SPAではトークンと組み合わせることが多いです。
- 実装例(Flask 風にトークン照合の概念):
# トークン生成(ログイン時)
session['csrf_token'] = secrets.token_urlsafe(32)
# フォームに埋め込む
# フォーム送信時の照合
if request.form.get('csrf_token') != session.get('csrf_token'):
abort(403)
- フレームワーク: Django, Rails, Spring などはCSRF保護機能を標準で提供しているため、適切に有効化すること。
FAQ
Q: Refererチェックだけで十分ですか?
A: 参照元チェックは有効ですが、Refererが省略されるケースや中継プロキシで変更される可能性があるため、CSRFトークンやSameSiteと組合せるのが望ましいです。
A: 参照元チェックは有効ですが、Refererが省略されるケースや中継プロキシで変更される可能性があるため、CSRFトークンやSameSiteと組合せるのが望ましいです。
Q: 出力エスケープをすればCSRFも防げますか?
A: いいえ。出力エスケープはXSS対策であり、CSRFは正規リクエストの偽造を防ぐ対策(トークン、再認証、SameSiteなど)が必要です。
A: いいえ。出力エスケープはXSS対策であり、CSRFは正規リクエストの偽造を防ぐ対策(トークン、再認証、SameSiteなど)が必要です。
関連キーワード: CSRF, XSS, CSRFトークン、Referer, Origin, SameSite, 再認証、トークン照合

\ せっかくなら /
情報処理安全確保支援士を
クイズ形式で学習しませんか?
クイズ画面へ遷移する→
すぐに利用可能!

