メインコンテンツへ
セキュリティCSRF対策

CSRF(Cross-Site Request Forgery)攻撃への対策として適切なものはどれか。

ア.ユーザの入力値を全てHTMLエスケープ処理し、スクリプトが実行されないようにする。
イ.SQLクエリにパラメータバインドを使用し、入力値がSQL文として解釈されないようにする。
ウ.フォームにサーバが生成したランダムなトークン(CSRFトークン)を埋め込み、リクエスト時にサーバ側で検証する。正解
エ.パスワードを複数回ハッシュ化し、データベースに漏洩した際にも元のパスワードを解析されにくくする。

解説

CSRF攻撃は「他人のフリをして手紙を送る詐欺」のようなもの。ログイン中のユーザに罠リンクをクリックさせ、本人が意図しないリクエストを送らせます。CSRFトークンは「秘密の合言葉」で、本物のフォームにしか載っていないため、罠リンクからは合言葉がわからず防げます。

なぜ ウ が正解か

CSRF攻撃は認証済みユーザのブラウザを利用して、ユーザの意図しないリクエストを送信させる攻撃です。対策:サーバがランダムなトークン(CSRFトークン)を生成してフォームに埋め込み、リクエスト受信時にトークンを検証します。攻撃者のサイトはトークン値を知ることができないため、正規のリクエストと偽造リクエストを区別できます。ウが正解です。

なぜ ア は間違いか

HTMLエスケープ処理はXSS(クロスサイトスクリプティング)の対策です。CSRFはスクリプト注入ではなくリクエスト偽造が攻撃手法であり、エスケープでは防げません。

なぜ イ は間違いか

パラメータバインド(プリペアドステートメント)はSQLインジェクションの対策です。CSRFはSQLとは無関係で、これでは防御できません。

なぜ エ は間違いか

パスワードのハッシュ化強化はデータベース漏洩時の対策です。CSRFはパスワード盗取ではなくリクエスト偽造が攻撃手法であり、ハッシュ化では防御できません。

出典: AI生成問題(学習用)