CakePHP4でCSRFを有効にする方法

Posted: 2020.08.11 / Category: CakePHP
以前はデフォルトでCsrfコンポーネントが有効になっていますが、バージョン3.7とか8くらいからCsrfコンポーネントはなくなり、CSRFはデフォルトでは無効になっています。
そこでCakePHP4のCSRFの設定方法と、一部のページで無効にする方法をご紹介します。
Sponsored Link
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) ミドルウェア