chiron/csrf

给它一个漂亮的描述!

维护者

详细信息

github.com/ncou/csrf

源代码

问题

资助包维护!
ncou

1.0.9 2021-11-27 10:39 UTC

This package is auto-updated.

Last update: 2024-09-20 16:57:23 UTC


README

PSR15 中间件,用于保护您的应用程序免受 跨站请求伪造 的攻击

Build Status Latest Version Total Downloads

此中间件使用 Cookie 存储每个 "不安全" 请求(POST / PUT / PATCH / DELETE)中用于比较的令牌。

为什么?

因为。

安装

$ composer require chiron/csrf

要激活扩展

[
    //...
    XXX\CsrfBootloader::class,
]

该扩展将激活 Chiron\Csrf\Middleware\CsrfTokenMiddleware 以为每个用户请求颁发唯一令牌。

启用特定路由的保护

该扩展提供了一个中间件 CsrfProtectionMiddleware,该中间件会在您的路由(特定路由或所有路由)上激活保护。此中间件将保护所有针对 "不安全" 方法 POSTPUTPATCHDELETE 的请求。

use Chiron\Csrf\Middleware\CsrfProtectionMiddleware;

// ...

public function boot(RouterInterface $router)
{
    $route = new Route('/', new Target\Action(HomeController::class, 'index'));

    $router->setRoute(
        'index',
        $route->withMiddleware(CsrfProtectionMiddleware::class)
    );
}

启用所有路由的保护

要激活所有路由上的 CSRF 保护,您需要通过 MiddlewareQueue "全局" 注册 Chiron\Csrf\Middleware\CsrfProtectionMiddleware

use Chiron\Csrf\Middleware\CsrfProtectionMiddleware;

// ...

public function boot(MiddlewareQueue $middlewares)
{
    $middlewares->addMiddleware(CsrfProtectionMiddleware::class);
}

使用方法

一旦激活了保护,您必须使用通过 PSR-7 属性 csrfToken 可用的令牌对每个请求进行签名。

在控制器或视图中接收此令牌

public function index(ServerRequestInterface $request)
{
    $csrfToken = $request->getAttribute('csrfToken');
}

用户的每个 POST / PUT / PATCH / DELETE 请求都必须包含此令牌作为 POST 参数 csrf-token 或头部 X-CSRF-Token

如果缺少令牌,用户将收到错误 403 禁止

如果令牌被篡改(并且将删除 Cookie),用户将收到错误 412 前置条件失败

public function index(ServerRequestInterface $request)
{
    $form = '
        <form method="post">
          <input type="hidden" name="csrf-token" value="{csrfToken}"/>
          <input type="text" name="value"/>
          <input type="submit"/>
        </form>
    ';

    $form = str_replace(
        '{csrfToken}',
        $request->getAttribute('csrfToken'),
        $form
    );

    return $form;
}

待办事项

  • 在 "csrf_token()" 辅助函数上添加文档。
  • 创建一个 TwigExtension 类以添加 csrf_token。