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-&gt;load-&gt;helper('form_helper');

收件人

$this-&gt;load-&gt;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-&gt;config-&gt;set_item('csrf_protection', TRUE);

在每个表单上你必须使用&lt;?php echo form_open('yourcontrollerfunction');?&gt;

如果 Null 像你的返回空必须有控制器名称,如果没有设置 htaccess 或路由,你可能需要包含 index.php..

&lt;?php echo form_open('your_controller_name_or_function');?&gt;

&lt;?php echo form_close();?&gt;

&lt;?php echo form_open('index.php/your_controller_name_or_function');?&gt;

&lt;?php echo form_close();?&gt;

【讨论】:

以上是关于Codeigniter:这种情况下 csrf 不工作的主要内容,如果未能解决你的问题,请参考以下文章

CodeIgniter 的 CSRF 令牌问题

前后端分离下如何防御CSRF攻击

在 CodeIgniter 中启用 CSRF 为 TRUE [关闭]

Codeigniter:Paypal IPN 和 csrf_protection

CodeIgniter 仅在某些页面使用 CSRF 保护

CodeIgniter 和 CSRF