CakePHP
  • 文档
    • 书籍
    • API
    • 视频
    • 报告安全问题
    • 隐私政策
    • 标识 & 商标
  • 商业解决方案
  • 商品
  • 公路旅行
  • 团队
  • 社区
    • 社区
    • 参与进来
    • 问题 (Github)
    • 烘焙坊
    • 精选资源
    • 培训
    • 聚会
    • 我的 CakePHP
    • CakeFest
    • 时事通讯
    • 领英
    • YouTube
    • 脸书
    • 推特
    • Mastodon
    • 帮助 & 支持
    • 论坛
    • Stack Overflow
    • IRC
    • Slack
    • 付费支持
CakePHP

C CakePHP 5.1 Chiffon API

  • 项目
    • CakePHP
      • CakePHP
      • Chronos
      • Elastic Search
      • 队列
  • 版本
    • 5.1
      • 5.1
      • 5.0
      • 4.5
      • 4.4
      • 4.3
      • 4.2
      • 4.1
      • 4.0
      • 3.10
      • 3.9
      • 3.8
      • 3.7
      • 3.6
      • 3.5
      • 3.4
      • 3.3
      • 3.2
      • 3.1
      • 3.0
      • 2.10
      • 2.9
      • 2.8
      • 2.7
      • 2.6
      • 2.5
      • 2.4
      • 2.3
      • 2.2
      • 2.1
      • 2.0
      • 1.3
      • 1.2

命名空间

  • 全局
  • Cake
    • 缓存
    • 集合
    • 命令
    • 控制台
    • 控制器
    • 核心
    • 数据库
    • 数据源
    • 错误
    • 事件
    • 表单
    • Http
      • 客户端
      • Cookie
      • 异常
      • 中间件
      • 会话
      • 测试套件
    • 国际化
    • 日志
    • 邮件
    • 网络
    • ORM
    • 路由
    • 测试套件
    • 实用程序
    • 验证
    • 视图

类 CsrfProtectionMiddleware

提供 CSRF 保护 & 验证。

此中间件将 CSRF 令牌添加到 Cookie 中。Cookie 值与每个 PATCH、POST、PUT 或 DELETE 请求的请求数据中的令牌或 X-CSRF-Token 标头进行比较。这被称为“双重提交 Cookie”技术。

如果请求数据缺失或与 Cookie 数据不匹配,将引发 InvalidCsrfTokenException 异常。

此中间件与 FormHelper 自动集成,当一起使用时,您的表单将在视图中使用 $this->Form->create(...) 时自动添加 CSRF 令牌。

命名空间: Cake\Http\Middleware
参见: https://cheatsheetseries.owasp.org/cheatsheets/Cross-Site_Request_Forgery_Prevention_Cheat_Sheet.html#double-submit-cookie

常量

  • int
    TOKEN_VALUE_LENGTH ¶
    16
  • int
    TOKEN_WITH_CHECKSUM_LENGTH ¶
    56

    令牌具有生成的 hmac,因此我们可以确保令牌是由我们的应用程序生成的。

    应为 TOKEN_VALUE_LENGTH + strlen(hmac)

    我们目前使用 sha1 作为 hmac,它创建 40 字节。

属性摘要

  • $_config protected
    array<string, mixed>

    CSRF 处理的配置。

  • $skipCheckCallback protected
    callable|null

    用于决定是否跳过对特定请求的令牌检查的回调。

方法摘要

  • __construct() public

    构造函数

  • _addTokenCookie() protected

    向响应 Cookie 添加 CSRF 令牌。

  • _createCookie() protected

    创建响应 Cookie

  • _unsetTokenField() protected

    从请求数据中删除 CSRF 保护令牌。

  • _validateToken() protected

    验证请求数据与 Cookie 令牌。

  • _verifyToken() protected

    验证 CSRF 令牌是否最初由接收应用程序生成。

  • createToken() public

    创建一个新的令牌,用于 CSRF 保护

  • isHexadecimalToken() protected

    测试令牌是否早于加盐令牌。

  • process() public

    根据 HTTP 动词检查和设置 CSRF 令牌。

  • saltToken() public

    对 CSRF 令牌应用熵

  • skipCheckCallback() public

    设置回调以允许跳过对特定请求的令牌检查。

  • unsaltToken() public

    从 CSRF 令牌中删除盐。

方法详细

__construct() ¶ public

__construct(array<string, mixed> $config = [])

构造函数

参数
array<string, mixed> $config 可选

配置选项。有关有效键,请参见 $_config。

_addTokenCookie() ¶ protected

_addTokenCookie(string $token, Psr\Http\Message\ServerRequestInterface $request, Psr\Http\Message\ResponseInterface $response): Psr\Http\Message\ResponseInterface

向响应 Cookie 添加 CSRF 令牌。

参数
string $token

要添加的令牌。

Psr\Http\Message\ServerRequestInterface $request

要验证的请求。

Psr\Http\Message\ResponseInterface $response

响应。

返回
Psr\Http\Message\ResponseInterface

_createCookie() ¶ protected

_createCookie(string $value, Psr\Http\Message\ServerRequestInterface $request): Cake\Http\Cookie\CookieInterface

创建响应 Cookie

参数
string $value

Cookie 值

Psr\Http\Message\ServerRequestInterface $request

请求对象。

返回
Cake\Http\Cookie\CookieInterface

_unsetTokenField() ¶ protected

_unsetTokenField(Psr\Http\Message\ServerRequestInterface $request): Psr\Http\Message\ServerRequestInterface

从请求数据中删除 CSRF 保护令牌。

参数
Psr\Http\Message\ServerRequestInterface $request

请求对象。

返回
Psr\Http\Message\ServerRequestInterface

_validateToken() ¶ protected

_validateToken(Psr\Http\Message\ServerRequestInterface $request): void

验证请求数据与 Cookie 令牌。

参数
Psr\Http\Message\ServerRequestInterface $request

要验证的请求。

返回
void
抛出
Cake\Http\Exception\InvalidCsrfTokenException
当 CSRF 令牌无效或缺失时。

_verifyToken() ¶ protected

_verifyToken(string $token): bool

验证 CSRF 令牌是否最初由接收应用程序生成。

参数
string $token

CSRF 令牌。

返回
bool

createToken() ¶ public

createToken(): string

创建一个新的令牌,用于 CSRF 保护

返回
string

isHexadecimalToken() ¶ protected

isHexadecimalToken(string $token): bool

测试令牌是否早于加盐令牌。

这些令牌是十六进制值,等于具有校验和长度的令牌。虽然它们容易受到 BREACH 的攻击,但它们应该随着时间的推移而轮换,并且在 5.x 中将停止支持。

参数
string $token

要测试的令牌。

返回
bool

process() ¶ public

process(ServerRequestInterface $request, RequestHandlerInterface $handler): Psr\Http\Message\ResponseInterface

根据 HTTP 动词检查和设置 CSRF 令牌。

处理传入的服务器请求以生成响应。如果无法自行生成响应,则可以委托给提供的请求处理程序来执行此操作。

参数
ServerRequestInterface $request

请求。

RequestHandlerInterface $handler

请求处理程序。

返回
Psr\Http\Message\ResponseInterface

saltToken() ¶ public

saltToken(string $token): string

对 CSRF 令牌应用熵

为了避免 BREACH,对令牌应用随机盐值。当令牌与会话进行比较时,需要对令牌进行去盐操作。

参数
string $token

要加盐的令牌。

返回
string

skipCheckCallback() ¶ public

skipCheckCallback(callable $callback): $this

设置回调以允许跳过对特定请求的令牌检查。

回调将接收请求实例作为参数,如果要跳过对当前请求的令牌检查,则必须返回 true。

参数
callable $callback

一个可调用对象。

返回
$this

unsaltToken() ¶ public

unsaltToken(string $token): string

从 CSRF 令牌中删除盐。

如果令牌不等于 TOKEN_VALUE_LENGTH * 2,它就是一个旧的未加盐值,为了向后兼容而支持。

参数
string $token

可能是加盐的令牌。

返回
string

属性详细

$_config ¶ protected

CSRF 处理的配置。

  • cookieName 要发送的 Cookie 的名称。
    • expiry CSRF 令牌的有效期,采用 strotime 兼容的值。默认为浏览器会话。
    • secure Cookie 是否将设置 Secure 标志。默认为 false。
    • httponly Cookie 是否将设置 HttpOnly 标志。默认为 false。
    • samesite Cookie 的“SameSite”属性。默认为 null。有效值:CookieInterface::SAMESITE_LAX、CookieInterface::SAMESITE_STRICT、CookieInterface::SAMESITE_NONE 或 null。
    • field 要检查的表单字段。更改此项还需要配置 FormHelper。
类型
array<string, mixed>

$skipCheckCallback ¶ protected

用于决定是否跳过对特定请求的令牌检查的回调。

如果回调函数返回 true,则会跳过 CSRF 防护令牌检查。

类型
callable|null
OpenHub
Pingping
Linode
  • 商业解决方案
  • 演示
  • 文档
  • 书籍
  • API
  • 视频
  • 报告安全问题
  • 隐私政策
  • 标识 & 商标
  • 社区
  • 参与进来
  • 问题 (Github)
  • 烘焙坊
  • 精选资源
  • 培训
  • 聚会
  • 我的 CakePHP
  • CakeFest
  • 时事通讯
  • 领英
  • YouTube
  • 脸书
  • 推特
  • Mastodon
  • 帮助 & 支持
  • 论坛
  • Stack Overflow
  • IRC
  • Slack
  • 付费支持

使用 CakePHP API Docs 生成