secit-pl/advanced-form-token-bundle

Symfony表单令牌的高级实现。

1.0.2 2018-12-05 08:17 UTC

This package is not auto-updated.

Last update: 2024-09-15 03:19:00 UTC


README

此包为Symfony 2.8和3.0+提供了高级表单令牌实现。

功能

  • 核心表单令牌的JavaScript版本
  • JavaScript代码混淆(需要外部库)

安装

在命令行运行

$ composer require secit-pl/advanced-form-token-bundle

通过添加包声明来更新您的AppKernel

class AppKernel extends Kernel
{
    public function registerBundles()
    {
        $bundles = [
            ...
            new SecIT\AdvancedFormTokenBundle\AdvancedFormTokenBundle(),
        ];

        ...
    }
}

用法

默认情况下,此包对所有表单都禁用。您可以全局启用或对单个表单启用它。

单个表单用法

要启用JavaScript令牌,只需将javascript_csrf_protection添加到表单默认值中。

<?php

namespace App\Form;

use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;
use Symfony\Component\Form\Extension\Core\Type as FormField;
use Symfony\Component\Validator\Constraints;

class ContactType extends AbstractType
{
    public function configureOptions(OptionsResolver $resolver)
    {
        $resolver->setDefaults([
            'javascript_csrf_protection' => true, // enable the JavaScript form token
            
            ...
        ]);
    }

    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        ...
    }
}

以下是JavaScript表单令牌使用的可能选项。其中大部分与原生Symfony表单令牌选项的工作方式相同。

javascript_csrf_protection - 默认:false - 是否启用JavaScript表单令牌?

javascript_csrf_field_name - 默认:_jstoken - 令牌表单字段名称

javascript_csrf_message - 如果表单令牌无效时显示的错误信息

javascript_csrf_javascript_obfuscator - 默认:null - 用于混淆生成的令牌JavaScript代码的混淆器类

全局配置

config.yml

advanced_form_token:
    javascript_token:
        enabled: ~ # default false - is JavaScript form token enabled for all forms?
        field_name: ~ # deafult: _jstoken - the token form field name for all forms
        javascript_obfuscator: ~ # deafult: null - The obfuscator class used to obfuscate generated token JavaScript code for all forms

JavaScript混淆器

默认情况下,生成的JavaScript代码未进行混淆。要启用它,您需要定义用于此操作要使用的混淆器类。此类应实现SecIT\AdvancedFormTokenBundle\JavaScript\ObfuscatorInterface

当前版本提供了一款现成的混淆器SecIT\AdvancedFormTokenBundle\JavaScript\TholuPhpPackerObfuscator,它要求您已经安装了https://github.com/tholu/php-packer。由于它使用了与该包不兼容的MIT许可证的LGPL-2.1许可证,因此默认不安装此包。

要为单个表单启用混淆器,将javascript_csrf_javascript_obfuscator选项设置为SecIT\AdvancedFormTokenBundle\JavaScript\TholuPhpPackerObfuscator值。

在大多数情况下,您可能希望对所有JavaScript令牌表单启用混淆器,因此最佳做法是在您的config.yml中全局设置。

advanced_form_token:
    javascript_token:
        javascript_obfuscator: SecIT\AdvancedFormTokenBundle\JavaScript\TholuPhpPackerObfuscator

从现在起,TholuPhpPackerObfuscator将为每个表单令牌生成的JavaScript代码随机进行混淆。