我的CakePHP 2.4应用程序中的SecurityComponent存在问题:
我有一个与CakeDC搜索插件连接的表单,用于过滤index
操作的结果。问题是SecurityComponent正是它应该做的事情,并防止表单被提交两次 - 如果用户搜索,返回并再次搜索,它会抛出CSRF错误,因为该令牌已被使用。
我为此尝试了一个解决方案,其中包括使用index
中的此代码禁用beforeFilter
操作上的SecurityComponent:
if($this->request->action == 'index'){
$this->Components->disable('Security');
}
这可以保护用户免受黑洞错误的影响,但这也意味着我的删除链接不再有效,因为delete
操作需要来自启用了安全性的页面的令牌 - 并且出于显而易见的原因我不想禁用delete.
如果用户在使用后退按钮后进行搜索,同时仍然保持SecurityComponent运行以便我的删除链接有效,我该如何避免黑洞?
答案 0 :(得分:0)
Read the documentation about CSRF.
SecurityComponent :: $ csrfUseOnce控制是否使用CSRF令牌 是一次性使用。设置为false以不在每个上生成新标记 请求。一个令牌将被重用,直到它过期。这减少了 用户因令牌而获得无效请求的可能性 消费。它具有使CSRF不那么安全的副作用 令牌是可重复使用的。
重新使用令牌可以解决问题。