编程语言
首页 > 编程语言> > php-ZF2表单的CSRF即使无效值也可以验证

php-ZF2表单的CSRF即使无效值也可以验证

作者:互联网

我有几种使用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,性别和角色的验证器,但是没有它们的结果是相同的.

解决方法:

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

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

让我发疯,但这是否意味着getInputFilter方法清除了诸如csrf,select和radio之类的元素上预先存在的验证器?

标签:validation,forms,csrf,zend-framework2,php
来源: https://codeday.me/bug/20191028/1956003.html