工作我想只有我的幾個控制器來接通CSRF保護,所以我有設置配置項(CSRF)犯規在笨
function __construct() {
parent::__construct();
$this->load->library('form_validation');
$this->load->library('tank_auth');
$this->load->helper(array('form', 'url'));
$this->load->model('user_model', '', true);
$this->config->set_item('csrf_protection', TRUE);
}
但它似乎沒有工作,雖然我的時候做一個頁面上的var_dump($這個 - >配置),它表明csrf_protection是真的,但餅乾沒有設置,窗體上有一個隱藏字段沒有值
<input type="hidden" name="ci_csrf_token" value="" />
CSRF令牌名和cookie的名稱是所有設置,窗體都調用form_open()。
任何幫助將不勝感激。
更新:所以從因安全類線的2.1.1版本構建if (config_item('csrf_protection') === TRUE) {
安全類控制器之前初始化,所以這是不可能的它自然,在控制器中的配置項的變化不會影響它。
嘗試設置的配置項之前加載的形式幫助這裏建正則表達式? – jcorry 2013-04-05 20:33:03
嗨!感謝您的快速回答,不幸的是,這並沒有解決問題,我已經把parent_構造之後的set_item放在 – Bndr 2013-04-05 20:38:49
之後。CSRF保護是核心的一部分,並且在處理任何控制器之前進行初始化。如果你想這樣做,而且你運行的是CI 2.x,你可能需要在'application/core'中用'MY_Security.php'文件修改核心,並在那裏提供你的邏輯來將CSRF應用到特定的控制器。你想閱讀[this](http://ellislab.com/codeigniter/user-guide/general/core_classes.html)並檢查文件'system/core/Security.php'如果你正在運行CI 3.x它有一個新的配置項'$ config ['csrf_exclude_uris'] = array();'這將做你想要的。但它只在CI 3.x – 2013-04-06 06:13:15