Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Security CakePHP 2.1:在元素上使用CSRF保护_Security_Cakephp_Csrf_Cakephp 2.1 - Fatal编程技术网

Security CakePHP 2.1:在元素上使用CSRF保护

Security CakePHP 2.1:在元素上使用CSRF保护,security,cakephp,csrf,cakephp-2.1,Security,Cakephp,Csrf,Cakephp 2.1,我的CommentsController操作之一“添加”操作有点特殊。 因为我在PostsController的“视图”视图上有一个“添加注释”表单,所以我有一个“添加注释”元素,而不是注释的“添加”视图。这就是我可以在Posts的“view”视图中插入带有表单的元素。我希望这听起来不太复杂 现在,在“add_comment”元素中,表单被提交给CommentsController的实际“add”操作。例如,如果由于无效的用户输入而必须再次呈现表单,则通过调用注释的“添加”视图再次呈现表单。这个

我的CommentsController操作之一“添加”操作有点特殊。 因为我在PostsController的“视图”视图上有一个“添加注释”表单,所以我有一个“添加注释”元素,而不是注释的“添加”视图。这就是我可以在Posts的“view”视图中插入带有表单的元素。我希望这听起来不太复杂

现在,在“add_comment”元素中,表单被提交给CommentsController的实际“add”操作。例如,如果由于无效的用户输入而必须再次呈现表单,则通过调用注释的“添加”视图再次呈现表单。这个“add”视图只再次包含“add_comment”元素,正如上面所说的,它包含实际的表单

现在的问题是,为了获得CSRF保护,我将安全组件添加到我的CommentsController中。CommentsController的所有管理操作都得到了保护,即在表单中呈现e令牌,并在提交表单时进行检查

尽管如此,add_comments元素表单并没有获得令牌。可能是因为它是一个元素,而不是相应的视图

如何将令牌手动插入元素的表单中,或者如何更好地解决此问题

多谢各位

编辑:Se也

EDIT2:是我的add\u comment元素中的内容

EDIT3:是add\u comment元素的HTML输出。nonce应该在
部分中

EDIT4:I放入
Debugger::log($this->Form->request->params)并显示输出


我还上传了整个CommentsController()。请注意,我指定了一个黑洞函数来捕获“auth”类型的错误。这是因为,每次我在add_comments.ctp元素中输入无效数据,并通过提交表单调用CommentsController的实际添加操作(以及注释的添加视图),我都会得到一个类型为“auth”的黑洞错误,我无法解释这一点,所以我用这种方式抓住了它——这甚至可能与我的问题有关。

我想不出这会成为问题的原因(我使用了这种方法)。您正在缓存元素吗?注释表单是否意外呈现在另一个表单中?你能把元素的HTML输出发布到某个地方吗?元素确实被缓存了,这可能是原因,但现在我删除了所有缓存,但仍然无法工作(我还删除了实际的缓存文件)。否,注释表单不会在其他表单中呈现。查看HTML输出的编辑。好的,我需要查看控制器代码。另外,将
debug($this->Form->request->params)
放在元素和视图中,让我们看看输出。我猜问题在于如何渲染元素,这一点我在你的问题中没有完全理解(控制器代码应该会澄清)。好的,我已经上传了你想要的内容。请参阅我的编辑。如果你问我,调试输出并没有显示任何有用的东西。。。请注意,通过在提交包含无效数据的表单后重新呈现元素,Debugger::log()行将执行两次,因为它同时位于元素和add视图中。另请参阅我关于安全组件设置的说明。谢谢你,伙计!真奇怪!您的参数中缺少生成安全字段所需的
\u令牌
密钥。它甚至在视图中丢失,这意味着它可能是会话的问题。如果在控制器中调试
$this->request->params
,您应该会看到其中的令牌。如果你不这样做,那么它就不会被设置好。如果您有空,我们应该通过聊天来跟踪问题,而不是在评论中这样做。