2016-09-14 16 views
0

我已經在CakePHP v3中啓用了csrf安全組件。在)AppConroller.php文件中initialize()方法CakePHP v3中的每個頁面重新加載請求都沒有更新CSRF令牌

公共函數初始化({

// some of my other initialization here 
    $this->loadComponent('Csrf'); 

    // some of my other initialization here 

}

在View側我使用以下代碼

echo $this->Form->create(....); 
// some of other stuffs 
echo $this->Form->end(); 

是,它將顯示CSRF令牌在隱藏字段下面的form標籤與CSRF令牌值。但是,在頁面重新加載後,CSRF標記值保持不變。

CSRF令牌的實際概念,對每個請求都會生成新的CSRF令牌。那麼我們如何才能在CakePHP v3中實現這一點?

回答

0

在大多數應用程序中,實際上不需要爲每個請求創建新的csrf標記。每個用戶會話一個很好,並且還提高了可用性(用戶可以使用後退按鈕等)。如果令牌是在登錄時生成的,則攻擊者仍然不能猜測它嚮應用程序創建外部請求。話雖如此,每個請求的新csrf標記可能會稍微更安全一些,可能不太容易出現實現錯誤,但這不是大多數應用程序中最薄弱的一點。

如需更詳細的解釋,看看here

0

CakePHP在創建表單時創建一個csrf標記,僅當沒有已經設置的表單時纔會創建。你需要編寫一個腳本來刪除cookie,如果它存在的話。默認情況下,Cookie名稱爲csrfToken,但可以使用手動cookieName當你初始化$this->loadComponent('Csrf');

沿東西線設置了一個param設置:

public function initialize() { 
    parent::initialize(); 
    $this->loadComponent('Csrf'); 
    $this->loadComponent('Cookie'); 
} 

public function beforeFilter(Event $event) { 
    parent::beforeFilter($event); 
    $cookieData = $this->request->cookie('csrfToken'); 
    if ($cookieData) { 
     $this->Cookie->delete('csrfToken'); 
    } 
} 

的csrfComponent在vendor/cakephp/cakephp/src/controller/component/CsrfComponent.php

相關問題