2012-10-16 73 views
0

我想使用CakePHP的SecurityComponent来执行使用requireSecure()通过SSL进行的应用程序请求。使用SecurityComponent :: requireSecure()将白名单列入黑名单

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

此功能内置于SecurityComponent中吗?如果不是,我该如何手动设置它?

+0

我有兴趣在我正在CakePHP自己创建的应用程序中强制使用SSL。但是,将所有http请求重定向到https会不会更好?这又会强制使用ssl?从用户角度来看,这似乎更加微妙,因为他们只是重定向,而不是在使用错误的协议时出现安全错误。 – Cameron

+0

作者试图避免的中间人攻击,是将http重定向到一个不好的主意(http://stackoverflow.com/questions/4365294/is-redire- http-to-https -a-坏主意)。绝对是一个巨大的可用性问题,黑洞是一个可怕的解决方案。不是这方面的专家,但我的问题有最好的解决方案。 –

回答

0

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

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的目标,但是可以使用abl如果需要,可以明确地覆盖Controller中的这个要求。

相关问题