suin/symfony2-csrf-firewall-bundle

Symfony2 的跨站请求伪造防火墙扩展包

1.0.0 2012-10-22 16:08 UTC

This package is auto-updated.

Last update: 2024-09-06 08:16:44 UTC


README

这是一个防火墙扩展包,用于保护您的 Symfony2 网站免受 CSRF(跨站请求伪造)攻击。此扩展包几乎可以自动运行,因此您无需为每个页面考虑 CSRF 保护。

特性

  • 所有 POST 方法表单都将受到 CSRF(即使您不使用 Symfony Form 的 anti-CSRF)保护

要求

  • PHP 5.3 或更高版本

安装

suin/symfony2-csrf-firewall-bundle 添加到您的 composer.json 文件中

{
    "require": {
        "suin/symfony2-csrf-firewall-bundle":">=1.0.0"
    }
}

执行 composer 进行安装

$ php composer.phar update suin/symfony2-csrf-firewall-bundle

Suin\CSRFFirewallBundle\SuinCSRFFirewallBundle 添加到您的 app/AppKernel.php 文件中

class AppKernel extends Kernel
{
    public function registerBundles()
    {
        $bundles = array(
            ...
            new Suin\CSRFFirewallBundle\SuinCSRFFirewallBundle(),
        );
    ...
...

工作原理

SuinCSRFFirewallBundle 总是在所有 POST 方法中检查 CSRF 令牌。如果未提供令牌或提供的令牌无效,SuinCSRFFirewallBundle 将向客户端返回 404 错误响应,并在执行动作之前停止进程。(确切地说,这个过滤器是在 kernel.controller 事件上工作的。)

在响应时(确切地说是在 kernel.response 事件上),SuinCSRFFirewallBundle 会找到响应 HTML 中的所有 POST 方法表单,并将其自动嵌入 CSRF 令牌。

选项

如何禁用特定动作的 CSRF 检查

通过向特定动作方法添加 @CSRF(check=false) 注解,您可以在动作中禁用 CSRF 检查。

<?php

namespace Acme\YourBundle\Controller;

use Suin\CSRFFirewallBundle\Annotations\CSRF;

class FooController extends Controller
{
    ...

    /**
     * @Route("/{id}/create/", name="create")
     * @Template()
     * @CSRF(check=false)
     */
    public function createAction($id)
    {
    	...
        return [];
    }

    ...
...
    

如何更改令牌键名

默认令牌键名为 __token__。如果您需要更改令牌键名,请编辑 app/config/parameters.yml 并定义它。

parameters:
    suin.csrf_firewall.token_name: your_favorite_token_name

许可证

MIT 许可证,请参阅 LICENSE