我正在重写一个应用程序以使用大多数CakePHP 3.5的功能。然而,有一件事让我感到难过。我按照描述设置了CsrfProtectionMiddleware,并且可以在生成的表单中看到令牌。
然而,该烹饪书没有描述“检查”发送的请求数据的方法。它似乎只说明如何设置:
$csrf = new CsrfProtectionMiddleware();
$middlewareQueue
// Catch any exceptions in the lower layers,
// and make an error page/response
->add(ErrorHandlerMiddleware::class)
// Handle plugin/theme assets like CakePHP normally does.
->add(AssetMiddleware::class)
// Add routing middleware.
->add(new RoutingMiddleware($this))
->add($cookies)
->add($csrf);
收到请求时,是否在启用csrf时由CakePHP 3.5自动执行检查?
是的,检查是自动执行的。来自API文档的引用:
此中间件将CSRF令牌添加到cookie。将cookie值与请求数据或每个PATCH,POST,PUT或DELETE请求上的X-CSRF-Token标头进行比较。
如果请求数据丢失或与cookie数据不匹配,将引发InvalidCsrfTokenException。
https://api.cakephp.org/3.5/class-Cake.Http.Middleware.CsrfProtectionMiddleware.html