
クロスサイトリクエストフォージェリ(Cross-Site Request Forgery:CSRF)は、ログイン中の利用者になりすまして、パスワード変更、メールアドレス変更、送金、設定変更などを実行させる攻撃です。
攻撃者がパスワードやセッションCookieを盗むとは限りません。
利用者のブラウザが、ログイン済みサイトへCookieを自動送信する性質を悪用します。
主要ブラウザのSameSite Cookieや、Djangoなどのフレームワーク標準防御によって、昔ながらの単純なCSRFは成功しにくくなりました。しかし、CSRFが消滅したわけではありません。
GETによる状態変更、不完全なトークン検証、SameSiteの誤設定、OAuthログイン、サブドメイン侵害、WebSocket、クライアントサイドCSRFなど、現代のWeb構成に合わせた攻撃面が残っています。
この記事では、CSRFの歴史、種類、成立条件、防御方式、Djangoでの実装、確認方法、再発防止まで順番に解説します。
CSRF対策の結論は、1つの仕組みに依存せず、複数の防御を重ねることです。
特に重要なのは、次の構成です。