最終更新日:
CSRFとは、ログインしている利用者に、罠のページなどから本人の意図しない操作のリクエストを送らせる攻撃と、その原因となる脆弱性です。
Webサイトが、届いたリクエストを利用者本人が意図して送ったものかを確かめていないと、利用者が罠のページを開いただけで、ログイン中のサイトに対して送金・購入・退会・設定の変更などのリクエストが送られてしまいます。IPA(情報処理推進機構)の「安全なウェブサイトの作り方」では、Cookieによるセッション管理やBasic認証を使うサイトで注意が必要とされ、金銭が絡むサイトでは被害が大きくなると説明されています。
IPAが根本的な対策として挙げているのは、処理を行うページをPOSTで受け付け、推測されにくい秘密の値(トークン)をフォームに埋め込んで一致を確かめること、実行の直前にパスワードを入れ直してもらうこと、リンク元(Referer)が正しいかを確かめることです。重要な操作をしたときに登録済みのメールアドレスへ知らせる方法は、被害を防ぐものではありませんが、利用者が異変に気づくきっかけになります。
多くのWebアプリケーションのフレームワークには、トークンを使った対策の仕組みが用意されています。仕組みがあっても、設定で無効にしていたり、一部の画面で使っていなかったりすると守られないため、脆弱性診断やコードレビューで確かめます。
関連する用語
- クロスサイトスクリプティング(XSS)Webページに悪意のあるスクリプトを紛れ込ませ、閲覧した人のブラウザで実行させる攻撃です。
- セッションWebサイトで、同じ利用者からの一連のやり取りをひとまとまりとして扱う仕組みです。
- SQLインジェクションWebアプリケーションの入力欄などに細工した文字列を入れ、データベースを不正に操作する攻撃です。
- OWASP Top 10Webアプリケーションの重大なセキュリティのリスクを、OWASP が10項目にまとめた文書です。
- セキュアコーディング脆弱性を作り込まないように、決まった書き方や確かめ方に沿ってプログラムを書くことです。