为什么unlockedActions不会覆盖CakePHP中的requireAuth?

时间:2013-02-07 13:05:01

标签: security cakephp

在我的Cake 2.3应用程序中,我有一个通过ajax调用的动作。由于我正在使用安全组件,因此我必须使用$this->Security->unlockedActions,否则操作将失败。

但是,unlockActions在调用$this->Security->requireAuth()时不起作用。这是一个错误吗?我对CakePHP如何处理安全性有误解吗?

为什么unlockActions无法覆盖requireAuth

2 个答案:

答案 0 :(得分:1)

SecurityComponent::requireAuth()将该操作添加到SecurityComponent::$requireAuth中存储的一系列必需操作。

如果您查看安全组件的startup code,您会发现SecurityComponent::_authRequired()(检查$requireAuth数组的方法)在 >甚至检查解锁的动作。我想如果你需要一个授权的动作,那应该优先于告诉应用它没有。

我仍然认为这是一个错误(或错误记录),因为它在文档中明确指出:

  

在某些情况下,您可能希望禁用所有安全检查   一个动作(例如ajax请求)。您可以通过“解锁”这些操作   将它们列在您的beforeFilter中的$ this-> Security-> unlockedActions中。

这是一项新功能,因此最好打开一张解释混乱的故障单,看看核心团队对此有何看法。

我还应该注意,为ajax请求禁用安全组件并不总是必要的。我有几个成功使用安全组件的应用程序,以及与ajax并排的CSRF检查。

答案 1 :(得分:0)

身份验证与安全性非常不同。

安全性可以防止多种攻击您网站的方式,而auth组件可以处理您的用户许可。当一个成员更新他的个人资料时,我确实想验证它是一个登录的成员(身份验证),但我可能不想将安全组件用于他正在呼叫的操作。