Codeigniter:这种情况下 csrf 不工作
Posted
技术标签:
【中文标题】Codeigniter:这种情况下 csrf 不工作【英文标题】:Codeigniter: csrf not working is this case 【发布时间】:2015-05-03 03:01:06 【问题描述】:我不想更改配置文件中的默认设置,默认为 FALSE。但我只想在联系表格中使用 CSRF(其他表格不需要):
这是我的控制器:
class Welcome extends CI_Controller
public function __construct()
parent::__construct();
$this->load->helper('form_helper');
$this->load->library('session');
public function index()
$this->config->set_item('csrf_protection', TRUE);
$this->load->view('welcome_message');
结束我的观点:
<div id="container">
<?php echo form_open(NULL); ?>
</form>
</div>
但是 CSRF 不起作用,它总是空值:
【问题讨论】:
您是否在配置文件中设置了加密密钥? 这似乎是框架中的一个错误。附带说明一下,无论如何都应该在所有表单上启用 CSRF。 我在您的配置文件中设置了加密密钥$config['encryption_key'] = 'tkppinpin';
【参考方案1】:
如果启用 csrf 必须使用 codeigniter 表单辅助函数,您是否在每个表单的 config.php 上启用了 CSRF。
http://www.codeigniter.com/user_guide/libraries/security.html
http://www.codeigniter.com/user_guide/helpers/form_helper.html
改变
$this->load->helper('form_helper');
收件人
$this->load->helper('form');
application/config/config.php
$config['csrf_protection'] = TRUE;
$config['csrf_token_name'] = 'token';
$config['csrf_cookie_name'] = 'cookie_monster';
$config['csrf_expire'] = 7200;
我觉得不能用这种方式。$this->config->set_item('csrf_protection', TRUE);
在每个表单上你必须使用<?php echo form_open('yourcontrollerfunction');?>
如果 Null 像你的返回空必须有控制器名称,如果没有设置 htaccess 或路由,你可能需要包含 index.php..
<?php echo form_open('your_controller_name_or_function');?>
<?php echo form_close();?>
或
<?php echo form_open('index.php/your_controller_name_or_function');?>
<?php echo form_close();?>
【讨论】:
以上是关于Codeigniter:这种情况下 csrf 不工作的主要内容,如果未能解决你的问题,请参考以下文章
在 CodeIgniter 中启用 CSRF 为 TRUE [关闭]