CSRFミドルウェアの設定
CakePHP3まではCsrfコンポーネントをロードして設定を行いましたが、4からはミドルウェアを設定します。
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を次のように設定します。
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;}

