記住,基本上所有的referer_check正在做的是一樣的東西:
$pattern = "/^http:\/\/www\.myurl\.com(\/.*)*$/";
if(!empty($_SERVER['HTTP_REFERER']) && !preg_match($pattern, $_SERVER['HTTP_REFERER'])) {
session_destroy();
}
這是煩人,建於referer_check
PHP的將不接受URL的數組,但你總是可以讓你自己一個人那樣做。因此,對於CakePHP的
,你可以這樣做以下:
// ADD THIS TO /app/config/config.php
$config['CustomSecurity'] = array(
'accept_referers' => array(
'http://www.my_site.com',
'https://www.other_allowed_referer.com',
)
);
// ADD THIS TO /app/app_controller.php
private function referer_check(){
if(!empty($_SERVER['HTTP_REFERER'])) {
$accept_referers = Configure::read('CustomSecurity.accept_referers');
$referer_accepted = false;
foreach($accept_referers as $referer) {
$pattern = '/^'.preg_replace('/(\.|\/)/','\\\$1',$referer).'(\/.*)*$/';
if(preg_match($pattern, $_SERVER['HTTP_REFERER']))
$referer_accepted = true;
}
if(!$referer_accepted) {
$this->Session->destroy();
exit;
}
}
}
,並在您app_controller::before_filter
功能,來電:
$this->referer_check();
...或者類似的東西反正...對不起關於代碼格式化,textarea是一個tard :)
你是100%它是檢查引用,而不是在先前的請求,以防止CSRF與表格發送令牌? – Pablo 2011-02-01 15:50:14
100%肯定。 CakePHP沒有檢查引用鏈接,它只是打開referer_check(一個檢查引用鏈接本身的PHP功能:http://www.php.net/manual/en/session.configuration.php#ini.session.referer-check ) - 另外,我看到的結果是將人員關閉。當CakePHP不喜歡它獲得的CSRF令牌時(或者它沒有得到它時)做的是「blackholing」(空白頁,基本上) – 2011-02-01 15:57:00
類似的:http://stackoverflow.com/questions/22079477/cakephp -session-is-lost-after-an-oauth-redirect – trante 2014-02-27 21:16:33