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) ミドルウェア


