1

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

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

为什么不unlockActions覆盖requireAuth

4

2 回答 2

1

SecurityComponent::requireAuth()将该操作添加到所需操作的数组中,存储在SecurityComponent::$requireAuth.

如果您查看安全组件的启动代码,您会发现SecurityComponent::_authRequired()检查$requireAuth数组的方法在解锁操作被检查之前被调用。我想如果您需要授权某项操作,那应该优先于告诉应用程序它没有授权。

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

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

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

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

于 2013-02-07T15:09:20.240 回答
0

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

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

于 2013-07-26T17:40:34.547 回答