
もし、あなたがお店のウェブサイトでログインしたまま、別の怪しいサイトを見ていたら…その怪しいサイトが勝手にあなたのアカウントでお店の物を買ってしまうかもしれません!これは、あなたがお店に「頼んでいない」のに、お店側があなたからの「頼み」だと勘違いしてしまうせいです。そんな「なりすまし」を防ぐのがCSRF対策です。
面接官:CSRFについて説明してください。
私:CSRF(Cross-Site Request Forgery:クロスサイトリクエストフォージェリ)は、ウェブサイトの脆弱性の一種で、攻撃者が、ユーザーがログインしているウェブサイトに対して、ユーザーになりすまして不正なリクエストを送信することを可能にします。
以前のプロジェクトでECサイトを構築した際、CSRF対策を徹底するために、全てのPOSTリクエストにトークンを埋め込む方式を採用しました。具体的には、サーバーサイドでセッションに紐づいたトークンを生成し、そのトークンをフォームにhiddenフィールドとして埋め込みました。
クライアントサイドでは、JavaScriptを使用して、Ajaxリクエスト時にもこのトークンをリクエストヘッダーに含めるように実装しました。
この対策により、CSRF攻撃による不正な商品購入やアカウント情報の変更といったリスクを大幅に軽減することができました。 また、定期的にトークンのローテーションを行うことで、セキュリティレベルをさらに向上させました。
現役エンジニアによる深掘り解説
メリット
なりすましによる不正なリクエストを防ぐことで、ユーザーの個人情報やアカウント情報の保護、金銭的な被害の防止に繋がります。
ウェブサイトの信頼性を向上させ、ユーザーが安心してサービスを利用できる環境を提供できます。
業界標準のセキュリティ対策であり、法的コンプライアンスの要件を満たすことができます。
デメリット
実装に手間がかかり、開発コストが増加する可能性があります。特に、既存のシステムに導入する場合は、大規模な改修が必要となる場合があります。
トークンの生成、検証、管理のオーバーヘッドが発生し、サーバーのリソース消費が増加する可能性があります。
CSRF対策が不十分な場合、例えばトークンの予測可能な生成や不適切な保管方法など、攻撃者に突破される可能性があります。
SPA(Single Page Application)など、従来のフォームベースのアプリケーションでない場合、対策方法が異なるため注意が必要です。
⚠️ 面接突破のワンポイント
- 「CSRF対策の実装方法について、具体的なコード例を交えて説明できますか?」という質問に備え、主要なフレームワークにおける実装方法(例えば、Spring SecurityのCSRF対策、LaravelのCSRF protectionなど)を理解しておくことが重要です。
- 「CSRF対策以外にも、どのようなセキュリティ対策を講じていますか?」という質問に備え、XSS対策、SQLインジェクション対策など、他の主要なウェブセキュリティ対策についても理解を深めておくことが重要です。


