工作我想只有我的几个控制器来接通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