スポンサーリンク

問題の解答・解説ページ

このページは解説の閲覧モードです。
実力試しをしたい方は、下のボタンからクイズに挑戦してください!

この問題をクイズ形式で解く
問題 No.6715
Webアプリケーションの脆弱性を突くクロスサイトリクエストフォージェリ攻撃(CSRF)の対策として不適切なものはどれか。

【正解の解説】

リクエストごとに推測困難なワンタイムトークンを生成して埋め込み、送信時に照合する仕組みではなく、静的な秘密の固定パラメータをURLクエリ文字列に含めて毎回同じ値でGETリクエストを送信させる。

合言葉が毎日変わる特殊な鍵ではなく、家中のどこにでもスペアキーが落ちているような状態です。URLクエリ文字列に含まれる固定値はブラウザの履歴やリファラーから簡単に漏洩するため、偽のサイトから同じ値を勝手に使われてあっさり侵入を許してしまいます。CSRFを防ぐには、使うたびに使い捨ての鍵を生成するワンタイムトークンが必須です。

スポンサーリンク

【その他の選択肢の解説】

送信元の正当性を確認するために、ブラウザが自動送信するCookieの属性として、SameSite属性をStrictまたはLaxに設定してクロスサイトでの送信を制限する。

これは別の正しい対策なので「不適切」を探す本問では誤りとなります。SameSite属性をStrictやLaxにすると、外部の悪意あるサイトから自サイトへジャンプした際、ブラウザが自動的にCookieを添付して送信するのをブロックできます。自動送信を防ぐことで、ログイン中のユーザーになりすました勝手なリクエスト実行を水際で食い止める強力な防壁となります。

ユーザーが重要な操作を実行する際、あらかじめ登録されたパスワードや暗証番号を再度入力させることで、意図しないリクエストの自動実行を防止する。

これも正しい対策の一つであるため不適切となります。攻撃者がユーザーの知らないところで勝手にリクエストを飛ばしても、直前で「本当にその処理を実行しますか?パスワードを再入力してください」と求められれば、攻撃者は自分の知らないパスワードを入力できず、自動実行を完全に阻止できます。ATMでお金を引き出す時に暗証番号を再度求められるのと同じ確実な防御策です。

リクエストを送信する際のHTTPメソッドとして、状態を変更する処理であっても安全性が高いとされるGETメソッドを採用し、URLに含まれるパラメータで処理を実行させる。

状態を変更する処理には安全性が高いとされるGETを使うという点が決定的な間違いであり、本問の正解(不適切なもの)となります。データの登録や削除などシステムの状態を変える処理には必ずPOSTメソッドを使うべきです。GETメソッドは誰でもURLを簡単に見たり共有したりできるため、悪意ある画像タグなどを通じて勝手にGETリクエストが送信され、被害が拡大してしまいます。