情報セキュリティの基礎
Webアプリケーションで、ログインしたままの利用者が攻撃者の用意した罠のページを開くと、利用者のブラウザから正規のサイトへ、利用者の意図しない送金や設定の変更のリクエストが送られてしまう脆弱性がある。この脆弱性への対策として適切なものはどれか。
- A重要な処理のフォームに、セッションごとに推測できないランダムな値(トークン)を埋め込み、リクエストを受けたときにその値が正しいかを確かめる
- Bパスワードを入力する欄の文字数の上限を大きくする
- CWebサーバのログを毎日バックアップする
答えと解説を見る
正解:A. 重要な処理のフォームに、セッションごとに推測できないランダムな値(トークン)を埋め込み、リクエストを受けたときにその値が正しいかを確かめる
この脆弱性はクロスサイトリクエストフォージェリ(CSRF)と呼ばれます。ブラウザは、正規のサイトへのリクエストには、どのページから送られたものでも、そのサイトのCookie(ログインしているセッションの情報)を自動的に付けて送ります。そのため、サーバがCookieだけでログイン中の利用者からの正しい操作と判断していると、罠のページから送らせたリクエストも受け付けてしまいます。対策の基本は、正規のフォームにだけ、セッションごとに推測できないランダムな値(CSRFトークン)を埋め込んでおき、サーバでその値を確かめることです。罠のページはこの値を知ることができないので、正しいリクエストを作れません。さらに、CookieのSameSite属性で、ほかのサイトから送られたリクエストにCookieを付けないようにしたり、送金のような重要な操作の前にパスワードを再入力させたりする対策もあります。XSSがサイトに不正なスクリプトを埋め込むのに対し、CSRFは利用者のブラウザに正規に見えるリクエストを送らせる点が違います。
- A. 正しい。罠のページからは知ることのできないトークンを確かめることで、正規のフォームからのリクエストだけを受け付けられます。
- B. 入力欄の文字数の上限は、意図しないリクエストを送らされることとは関係がありません。
- C. ログのバックアップは、事後の調査には役立ちますが、意図しないリクエストを防ぐ対策にはなりません。