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