PHP-即使通过_csrf_token也检测到Symfony CSRF攻击
作者:互联网
这是我的表格:
<form novalidate action="<?php echo url_for('article/submit') ?>" method="POST">
<?php echo $form['title']->renderRow() ?>
<?php echo $form['content']->renderRow() ?>
<?php echo $form->renderHiddenFields() ?>
<input type="submit" value="Save"/>
</form>
并查看生成的HTML源,实际上正在渲染_csrf_token IS.这是我的动作:
public function executeSubmit(sfWebRequest $request)
{
$this->forward404Unless($request->isMethod('post'));
$request->checkCSRFProtection();
die('submitting post...');
}
错误:
_csrf_token [CSRF attack detected.]
即使在我的行动中,如果我执行var_dump($_ POST);死;我得到:
Array
(
[title] => string(8) "My title"
[content] => string(10) "My Content"
[_csrf_token] => string(32) "<my token here>"
)
因此,csrf令牌肯定可以正确渲染和传递.我究竟做错了什么?
此外,是否在任何地方都有有关checkCSRFProtection()的文档? API的文档除了承认它的存在外没有说其他任何事情.
解决方法:
需要检查的几件事:
(来源:从http://oldforum.symfony-project.org/index.php/t/17867/开始)
确保已在设置中定义了“秘密”:
csrf_secret: ThisIsMySecret # Unique secret to enable CSRF protection or false to disable`
另外,根据我从该表单帖子中收集到的信息,CSRF保护检查会在$this-> form-> isValid()中自动完成,因此如果您不需要调用$request-> checkCSRFProtection(),已经在检查表格是否有效.如果不是,则添加$this-> form-> isValid().
$request-> checkCSRFProtection()似乎也不适用于表格;目的(如果我没错的话)是为了验证用户单击链接时提供的请求.启用CSRF保护后,link_to()会自动将CSRF保护添加到它生成的链接中.因此,基本上,对于表单的CSRF保护与不是源自表单的请求的CSRF保护是不同的.
有关更多详细信息,请参阅此票证:http://trac.symfony-project.org/ticket/7315
可能感兴趣的另一张票:http://trac.symfony-project.org/ticket/5698
标签:forms,csrf,symfony1,php 来源: https://codeday.me/bug/20191102/1990546.html