symfony 1.4如何关闭一个注册表单的csrf保护?

Pat*_*ick 3 symfony1 symfony-1.4

我正在使用sfDoctrineGuard和sfForkedDoctrineApply.我编写了一个模块,允许登录用户创建一个子用户,该用户继承了父级的一些配置文件设置.它的工作方式很棒,但是我必须为整个应用程序(在设置中)关闭csrf保护以使其正常工作,因为当它打开时,它(理所当然,我可能会添加)检测到csrf攻击.所以,我需要一种方法来关闭它,或者至少捕获并删除验证.

我尝试过很多技巧,但都没有.包含:

      $this->disableLocalCSRFProtection(); 
Run Code Online (Sandbox Code Playgroud)

在形式.问题是,它是一个自定义表单,正在调用父配置,它正在注入csrf保护.

我已经阅读了一些我认为指向正确方向的解决方案:Symfony 1.4:表单中的CSRF自定义错误消息,但它们没有解决此特定问题.

欢迎提出建议和解决方案.提前致谢.

Las*_*hae 7

基本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保护都被禁用.


Fir*_*ula 6

$这 - > 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)