depthbomb / csrf-bundle
此包已被废弃且不再维护。未建议替代包。
为Symfony路由提供简单的CSRF保护
1.1.0
2023-07-01 02:57 UTC
Requires
- php: >=8.1
Requires (Dev)
- symfony/config: 6.3.*
- symfony/dependency-injection: 6.3.*
- symfony/event-dispatcher: 6.3.*
- symfony/http-foundation: 6.3.*
- symfony/http-kernel: 6.3.*
- symfony/security-csrf: 6.3.*
This package is auto-updated.
Last update: 2023-11-07 02:53:29 UTC
README
这是一个基于Symfony安全包构建的简单包,允许您通过CSRF令牌检查轻松保护任何控制器或单独的控制器操作。
安装
$ composer require depthbomb/csrf-bundle
需求
- PHP >= 8.1
- Symfony 6.3.x
使用
CsrfBundle 使用属性来保护控制器或控制器方法。这些属性接受一个字符串参数,表示将在请求上验证的CSRF令牌的ID。
<?php namespace App\Controller // ... use Depthbomb\CsrfBundle\Attribute\CsrfProtected; #[CsrfProtected('my token')] // protect entire controllers class MyController extends AbstractController { // ... #[CsrfProtected('my token')] // protect specific actions public function myAction(): Response { // ... } }
然后您可以使用您首选的方法生成CSRF令牌
// in a service/controller $my_token = $this->tokenManager->getToken('my token');
{# in Twig templates #}
{{ csrf_token('my token') }}
这就完成了!具有该属性的控制器/操作将在事件链早期检查令牌的有效性。当操作需要令牌但未提供时(见下文),则抛出HTTP错误码为428
的HttpException
。如果为受保护的操作提供了令牌且令牌无效,则抛出HTTP错误码为412
的HttpException
。
在请求中发送令牌
可以通过几种方式在请求中发送令牌
- 包含在
X-Csrf-Token
头中 - 作为请求有效载荷中的
_csrf_token
包含 - 作为查询字符串中的
token
(?token=xxx
)包含
注意
这是我第一个Symfony包(以及Composer包)。由于我遇到了寻找创建包的正确和当前方法的问题,此包可能没有正确实现。请告诉我(通过问题或PR)如果有什么事情应该以其他方式完成。