renderRow() ?> renderRow() ?> renderHiddenFields() ?> 查看生成的 HTML -6ren">
gpt4 book ai didi

php - 即使在传递 _csrf_token 时也检测到 Symfony CSRF 攻击

转载 作者:可可西里 更新时间:2023-11-01 01:07:51 26 4
gpt4 key购买 nike

这是我的表格:

<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 实际上正在呈现。这是我的操作:

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 token 肯定被正确呈现和传递。我做错了什么?

此外,是否有任何关于 checkCSRFProtection() 的文档? API 文档除了承认它的存在外,什么也没说。

最佳答案

需要检查的几件事:

(来源: 来自 http://oldforum.symfony-project.org/index.php/t/17867/ )

确保您已在设置中定义了“ secret ”:

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 保护与并非源自表单的请求的保护是不同的。

有关详细信息,请参阅此票证:http://trac.symfony-project.org/ticket/7315

可能感兴趣的另一张票:http://trac.symfony-project.org/ticket/5698

关于php - 即使在传递 _csrf_token 时也检测到 Symfony CSRF 攻击,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7016493/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com