Pat*_*ick 3 symfony1 symfony-1.4
我正在使用sfDoctrineGuard和sfForkedDoctrineApply.我编写了一个模块,允许登录用户创建一个子用户,该用户继承了父级的一些配置文件设置.它的工作方式很棒,但是我必须为整个应用程序(在设置中)关闭csrf保护以使其正常工作,因为当它打开时,它(理所当然,我可能会添加)检测到csrf攻击.所以,我需要一种方法来关闭它,或者至少捕获并删除验证.
我尝试过很多技巧,但都没有.包含:
$this->disableLocalCSRFProtection();
Run Code Online (Sandbox Code Playgroud)
在形式.问题是,它是一个自定义表单,正在调用父配置,它正在注入csrf保护.
我已经阅读了一些我认为指向正确方向的解决方案:Symfony 1.4:表单中的CSRF自定义错误消息,但它们没有解决此特定问题.
欢迎提出建议和解决方案.提前致谢.
基本sfForm构造函数配置是否启用以及CSRFSecret是什么.
class sfForm implements ArrayAccess, Iterator, Countable
{
public function __construct($defaults = array(), $options = array(), $CSRFSecret = null)
{
$this->setDefaults($defaults);
$this->options = $options;
$this->localCSRFSecret = $CSRFSecret;
$this->validatorSchema = new sfValidatorSchema();
$this->widgetSchema = new sfWidgetFormSchema();
$this->errorSchema = new sfValidatorErrorSchema($this->validatorSchema);
$this->setup();
$this->configure();
$this->addCSRFProtection($this->localCSRFSecret);
$this->resetFormFields();
}
}
Run Code Online (Sandbox Code Playgroud)
在这种情况下,通过disableLocalCSRFProtection()禁用本地CSRF保护不起作用,您可以尝试使用"false"CSRFSecret"创建表单实例".
例:
$myForm = new myForm(array(), array(), false);
Run Code Online (Sandbox Code Playgroud)
编辑:(上述建议不适用于海报)
你可以试试,只是在应用程序的settings.yml中评论"csrf_secret"配置.评论此行后,不要忘记清除symfony的缓存.要验证全局禁用CSRF保护,您可以检查"sf_csrf_secret"配置的值,如下所示;
var_dump(sfConfig::get('sf_csrf_secret'))
Run Code Online (Sandbox Code Playgroud)
这应该给你一个布尔值false,这意味着所有CSRF保护都被禁用.
$这 - > disableLocalCSRFProtection(); 也不适合我.我在创建表单后立即将crsf validator required选项设置为false.
<?php
$form = new UploadImageForm();
$form->getValidator($form->getCSRFFieldName())->setOption('required', false);
if ($request->isMethod(sfWebRequest::POST)) {
...
?>
Run Code Online (Sandbox Code Playgroud)