secit-pl / advanced-form-token-bundle
Symfony表单令牌的高级实现。
Requires
- php: >=5.4.0
- symfony/dependency-injection: ~2.8|~3.0|~4.0
- symfony/framework-bundle: ~2.8|~3.0|~4.0
Suggests
- tholu/php-packer: Allows simple JavaScript form token JavaScript code obfuscation
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代码随机进行混淆。