类 SessionCsrfProtectionMiddleware
通过基于会话的令牌提供 CSRF 保护。
此中间件在会话中添加一个 CSRF 令牌。每个请求必须在请求数据中包含一个令牌,或在每个 PATCH、POST、PUT 或 DELETE 请求的 X-CSRF-Token 标头中包含一个令牌。这遵循“同步器令牌”模式。
如果请求数据丢失或与会话数据不匹配,将引发 InvalidCsrfTokenException。
此中间件会自动与 FormHelper 集成,当一起使用时,您的表单将在视图中使用 $this->Form->create(...) 时自动添加 CSRF 令牌。
如果您使用此中间件,不要也使用 CsrfProtectionMiddleware。
参见: https://cheatsheetseries.owasp.ac.cn/cheatsheets/Cross-Site_Request_Forgery_Prevention_Cheat_Sheet.html#synchronizer-token-pattern
常量
- 
          
          intTOKEN_VALUE_LENGTH ¶32
属性摘要
- 
        $_config protectedarray<string, mixed>用于 CSRF 处理的配置。 
- 
        $skipCheckCallback protectedcallable|null用于决定是否为特定请求跳过令牌检查的回调。 
方法摘要
- 
          __construct() public构造函数 
- 
          createToken() public创建一个用于 CSRF 保护的新令牌 
- 
          process() public根据 HTTP 动词检查并设置 CSRF 令牌。 
- 
          replaceToken() public static替换提供的请求中的令牌。 
- 
          saltToken() public将熵应用于 CSRF 令牌 
- 
          skipCheckCallback() public设置回调以允许跳过特定请求的令牌检查。 
- 
          unsaltToken() protected从 CSRF 令牌中移除盐。 
- 
          unsetTokenField() protected从请求数据中移除 CSRF 保护令牌。 
- 
          validateToken() protected根据 cookie 令牌验证请求数据。 
方法详情
__construct() ¶ public
__construct(array<string, mixed> $config = [])构造函数
参数
- 
                array<string, mixed>$config optional
- 配置选项。有关有效键,请参阅 $_config。 
createToken() ¶ public
createToken(): string创建一个用于 CSRF 保护的新令牌
此令牌是一个简单的唯一随机值,因为比较值存储在会话中,在那里无法被篡改。
返回
stringprocess() ¶ public
process(ServerRequestInterface $request, RequestHandlerInterface $handler): Psr\Http\Message\ResponseInterface根据 HTTP 动词检查并设置 CSRF 令牌。
处理传入的服务器请求以生成响应。如果无法生成响应本身,它可能会委托给提供的请求处理程序来执行此操作。
参数
- 
                ServerRequestInterface$request
- 请求。 
- 
                RequestHandlerInterface$handler
- 请求处理程序。 
返回
Psr\Http\Message\ResponseInterfacereplaceToken() ¶ public static
replaceToken(Cake\Http\ServerRequest $request, string $key = 'csrfToken'): Cake\Http\ServerRequest替换提供的请求中的令牌。
替换会话和请求属性中的令牌。在权限升级或权限降低期间替换令牌是一个好主意。
参数
- 
                Cake\Http\ServerRequest$request
- 要更新的请求 
- 
                string$key optional
- 要设置的会话键/属性。 
返回
Cake\Http\ServerRequestsaltToken() ¶ public
saltToken(string $token): string将熵应用于 CSRF 令牌
为避免 BREACH,将随机盐值应用于令牌。当令牌与会话进行比较时,需要取消令牌的盐。
参数
- 
                string$token
- 要加盐的令牌。 
返回
stringskipCheckCallback() ¶ public
skipCheckCallback(callable $callback): $this设置回调以允许跳过特定请求的令牌检查。
回调将接收请求实例作为参数,如果要跳过当前请求的令牌检查,则必须返回 true。
参数
- 
                callable$callback
- 一个可调用对象。 
返回
$thisunsaltToken() ¶ protected
unsaltToken(string $token): string从 CSRF 令牌中移除盐。
如果令牌不是 TOKEN_VALUE_LENGTH * 2,则它是一个旧的未加盐的值,为了向后兼容而支持。
参数
- 
                string$token
- 可能是加盐的令牌。 
返回
stringunsetTokenField() ¶ protected
unsetTokenField(Psr\Http\Message\ServerRequestInterface $request): Psr\Http\Message\ServerRequestInterface从请求数据中移除 CSRF 保护令牌。
这确保了令牌在表单篡改保护期间不会导致故障。
参数
- 
                Psr\Http\Message\ServerRequestInterface$request
- 请求对象。 
返回
Psr\Http\Message\ServerRequestInterfacevalidateToken() ¶ protected
validateToken(Psr\Http\Message\ServerRequestInterface $request, Cake\Http\Session $session): void根据 cookie 令牌验证请求数据。
参数
- 
                Psr\Http\Message\ServerRequestInterface$request
- 要验证的请求。 
- 
                Cake\Http\Session$session
- 会话实例。 
返回
void抛出
Cake\Http\Exception\InvalidCsrfTokenException当 CSRF 令牌无效或丢失时。
