编程语言
首页 > 编程语言> > PHP-即使通过_csrf_token也检测到Symfony CSRF攻击

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