CSRF(クロスサイトリクエストフォージェリ:Cross-Site Request Forgery)は、ユーザーが意図しない操作を第三者のサイトから強制される攻撃手法です。たとえば、ユーザーがログイン中のWebアプリケーションに対して、悪意あるサイトからリクエストを送信させることで、不正に情報を更新したり、データを削除したりすることが可能になります。
1. CSRFの仕組み
CSRFは、被害者が認証済みの状態であることを悪用します。攻撃者は、ユーザーのブラウザに対して次のようなリクエストを送信させます:
ユーザーが example.com にログインしており、セッションが有効な場合、このリクエストが自動的に実行され、意図せずアカウントが削除されてしまいます。
2. PHPにおけるCSRF対策
CSRFを防止するためには、サーバー側で「正当なリクエストであるか」を確認する仕組みを実装する必要があります。主な対策として、CSRFトークンの利用があります。
(1)CSRFトークンの生成と埋め込み
サーバー側でセッションにCSRFトークンを生成・保存し、HTMLフォームに隠しフィールドとして埋め込みます。
(2)トークンの検証
フォームが送信されたときに、POSTデータに含まれるトークンとセッション内のトークンを照合します。
3. CSRF対策の補足ポイント
-
トークンはページごとに生成することが望ましい(ワンタイムトークンによる強化)。
-
JavaScriptによる非同期通信(AJAX)でも、ヘッダーにトークンを含めて送信する。
-
セッションハイジャック対策(例:セッション固定攻撃防止)と併せて対策を行うことが重要。
4. PHPフレームワークでの対応
多くのPHPフレームワーク(Laravel, Symfony, CodeIgniterなど)は、CSRF対策機能を標準で提供しており、フォームに自動でトークンを埋め込む機能が用意されています。
まとめ
CSRFは、ユーザーの信頼を利用した非常に危険な攻撃です。PHPでWebアプリケーションを開発する際には、CSRFトークンの生成・検証による対策を必ず導入することが、セキュアなシステム構築において不可欠です。
生成日:2025/05/03