使用SecurityComponent :: requireSecure()将白名单而不是列入黑名单

时间:2012-10-16 17:52:22

标签: cakephp

我想使用CakePHP的SecurityComponent来强制使用requireSecure()通过SSL进行应用请求。

我的问题是默认情况下这是黑名单方法 - 默认情况下允许不安全访问,除非在该控制器中明确禁止。我想切换到白名单方法 - 默认拒绝不安全访问,除非我在该控制器中明确允许它。

此功能是否内置于SecurityComponent中?如果没有,我该如何手动设置?

1 个答案:

答案 0 :(得分:0)

默认情况下,它似乎没有内置。您可以通过创建控制器的$requireSecure属性,然后在requireSecure()中有条件地调用AppController::beforeFilter()来模拟此情况。以下是如何实现它:

AppController.php:

public $requireSecure = true;

public function beforeFilter() {
    if ($this->requireSecure) {
        $blacklist = is_array($this->requireSecure) ? $this->requireSecure : array('*');
        $this->Security->requireSecure($blacklist);
    }
}

白名单控制器:

public $requireSecure = false;

控制器因方法而异(请注意$requireSecure是黑名单):

public $requireSecure = array('login');

这实现了默认情况下要求SSL的目标,但如果需要,可以在Controller中明确覆盖此要求。