WEBOPIXEL

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