【问题标题】:ZF2 form's CSRF validates even with invalid valuesZF2 表单的 CSRF 即使使用无效值也可以验证
【发布时间】:2014-12-17 15:13:20
【问题描述】:

我有几种使用 CSRF 输入的表单。例如,在我的表单的构造函数中,它看起来像这样:

    $this->add(array (
        'name' => 'csrf',
        'type' => 'Csrf',
        'attributes' => array(
            'id' => 'csrf'
        )
    ));

只是为了好玩,我尝试使用 Firebug 更改 CSRF 输入的令牌值并提交表单,只是为了看看会发生什么。结果:它仍然有效。我什至转储了 $_POST 数据以确认正在提交无效令牌。更重要的是,我尝试将超时设置为 10 秒,同样的事情发生了:表单似乎忽略了 CSRF 输入并验证表单是否正常。代码如下:

    $this->add(array (
        'name' => 'csrf',
        'type' => 'Csrf',
        'attributes' => array(
            'id' => 'csrf'
        ),
        'options' => array(
            'csrf_options' => array(
                'timeout' => 10
            )
        )
    ));

我什至尝试将 CSRF 元素的过滤器添加到表单的输入过滤器中,但同样,它仍然通过了,当它不应该有的时候。

还有其他我不应该做的事情吗?如果它实际上不会做任何事情,我不想将它添加到我的表单中。

编辑:这是我的表单和控制器操作的代码的link。请注意,虽然表单的方法 getInputFilter 具有用于 csrf、sex 和角色的验证器,但没有它们的结果是相同的。

【问题讨论】:

  • 这听起来很奇怪。您是否 100% 确定表格已通过验证?你可以检查你的控制器中的表单错误消息或使用 $form->getMessages() 查看文件吗?
  • 这很奇怪。在浏览器中检查时,无论 csrf 值是什么,它都可以正常验证。在我的单元测试中也是如此:如果我在其中更改 csrf 值,它就会继续运行。
  • 还有一些奇怪的事情:如果我为 Select 或 Radio 元素添加无效值,我的测试也会通过...
  • 您是偶然使用 zf2 开发版本还是使用稳定版本?
  • 您能否也将您的视图添加到 pastebin,我在您的控制器或表单和 InputFilter 中找不到任何内容。您可以尝试将 inputFilterSpecifications 移动到新文件 UserInputFilter 并使用 $form->setInputFilter(new UserFilter) 将其设置到控制器中的表单上,或使用 getServiceLocator() 以检索过滤器。您还可以检查的是您的输入过滤器接收到的内容。看看$form->getInputFilter()->getRawValues() 看看你的InputFilter 收到了什么。

标签: php forms validation zend-framework2 csrf


【解决方案1】:

在稍微阅读了文档之后,我不知何故偶然发现了一些让我思考的东西。所以我尝试将以下代码添加到 getInputFilter 方法中:

$inputFilter->add($factory->createInput(
    array(
        'name' => 'csrf',
        'validators' => array (
            array(
                'name' => 'csrf'
            )
        )
)));

说我疯了,但这是否意味着 getInputFilter 方法会清除 csrf、select 和 radio 等元素上预先存在的验证器?

【讨论】:

  • 你找到你在回答中提出的问题的答案了吗?我也有同样的问题
  • 没有。再说一次,我还没有真正去寻找。现在,我只是手动设置了验证器,它工作得很好。
  • 这里是您问题的答案stackoverflow.com/questions/24778339/…
猜你喜欢
  • 2014-04-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-15
  • 2016-09-09
  • 2018-03-10
  • 2017-08-15
相关资源
最近更新 更多