2012-10-16 70 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中的這個要求。

相關問題