CSRFミドルウェアの設定
CakePHP3まではCsrfコンポーネントをロードして設定を行いましたが、4からはミドルウェアを設定します。
src/Application.php
use Cake\Http\Middleware\CsrfProtectionMiddleware; // ... public function middleware(MiddlewareQueue $middlewareQueue): MiddlewareQueue { $middlewareQueue // ... // CSRF対策 ->add(new CsrfProtectionMiddleware()); return $middlewareQueue; }
CsrfProtectionMiddleware
をインポートして、middleware
メソッドのmiddlewareQueue
に追加するだけです。
特定のルートだけCSRFを除外
上記の設定をすると全ルートでCSRFが設定されますが、特定のルートは設定したくない時もあります。
例えばAPIはCSRFを設定しない場合はwhitelistCallback
を次のように設定します。
src/Application.php
public function middleware(MiddlewareQueue $middlewareQueue): MiddlewareQueue { $csrf = new CsrfProtectionMiddleware(); // コールバックが `true` を返す場合、トークンのチェックはスキップされます。 $csrf->whitelistCallback(function ($request) { if ($request->getParam('prefix') === 'Api') { return true; } }); $middlewareQueue // ... // CSRF対策 ->add($csrf); return $middlewareQueue; }
参考ページ
クロスサイトリクエストフォージェリー (CSRF) ミドルウェア