fantoine/csrf-route-bundle

Symfony2 扩展包,提供了一种简单的方法向路由添加 CSRF 令牌

1.0.4 2015-08-18 12:51 UTC

This package is not auto-updated.

Last update: 2024-09-25 14:50:47 UTC


README

*/!\ 此扩展包不再受支持,已迁移至 Genedys/csrf-route-bundle /!*

FantoineCsrfRouteBundle

Symfony2 扩展包提供了路由注解和选项,以保护路由免受 CSRF 攻击,而无需使用表单。

SensioLabsInsight

安装

使用 Composer 安装扩展包

composer require fantoine/csrf-route-bundle '~1.0@dev'

或者在你的 composer.json 文件中添加以下行

    "require": {
        ...
        "fantoine/csrf-route-bundle": "~1.0@dev",
        ...
    }

然后,在你的应用程序的内核类中注册扩展包

    // app/AppKernel.php
    public function registerBundles()
    {
        $bundles = array(
            // ...
            new Fantoine\CsrfRouteBundle\FantoineCsrfRouteBundle(),
            // ...
        );
    }

配置

配置参考

fantoine_csrf_route:
    enabled: true
    field_name: _token
  • enabled : 启用或禁用令牌验证(默认: true);
  • field_name : 添加到路由 URL 的字段名称(默认: _token)。

使用方法

使用此包的唯一操作是向你要保护的路由添加一些配置。

该扩展包添加了一个路由器,可以在生成路由时附加令牌查询参数,并添加了一个控制器监听器来验证调用路由上的令牌。

选项配置

该扩展包检查控制器调用,并搜索 csrf_token 选项。此选项的可选参数有

  • token : 令牌参数名称(默认 _token
  • intention : 令牌意图。不同的意图生成不同的令牌(默认 null,结果为路由名称)。
  • methods : 当验证 CSRF 令牌时的 HTTP 方法(默认 GET)。
# app/config/routing.yml
homepage:
    ...
    options:
        - csrf_token: 
            - token: '_token'
            - intention: null
            - methods: [GET]

你也可以仅指定 csrf_token 选项为 true 以使用默认参数。

# app/config/routing.yml
homepage:
    ...
    options: { csrf_token: true }

注解配置

如果你使用注解来配置你的路由,那么向敏感操作添加额外的注解是最简单的方法

<?php
// src Acme\DemoBundle\Controller\DefaultController.php

// ...
use Fantoine\CsrfRouteBundle\Annotation\CsrfToken;
// ...

class DefaultController {
    // ...
    /**
     * ...
     * @CsrfToken
     */
    public function sensibleAction()
    {
        //...
    }
    // ...
}

Twig 集成

由于扩展包提供了自定义路由器,因此 CSRF 令牌会自动附加到使用 path(...)url(...) 在 Twig 模板中生成的 URL 上。

路由器兼容性

此扩展包覆盖了默认的 Symfony 路由器。如果你使用其他执行相同操作的扩展包(例如 JMSI18nRoutingBundle),则此扩展包中的路由器作为适配器自动集成到先前配置的路由器中。唯一要关心的是在覆盖路由器的扩展包之后注册 FantoineCsrfRouterBundle。

致谢

Fabien Antoine 创建。

许可证

此扩展包受 MIT 许可证 的约束。