【问题标题】:CSRF enabled throws 403 (forbidden) in CodeIgniter在 CodeIgniter 中启用 CSRF 会引发 403(禁止)
【发布时间】:2020-08-13 08:35:22
【问题描述】:

所以我计划在我的网站中实施 CSRF 并设置我认为我设置正确但仍然存在 ajax 提交表单问题的所需内容。

$config['csrf_protection'] = TRUE;
$config['csrf_token_name'] = 'csrf_token_name';
$config['csrf_cookie_name'] = 'csrf_cookie_name';
$config['csrf_expire'] = 7200;
$config['csrf_regenerate'] = FALSE;
$config['csrf_exclude_uris'] = array();

这是我在配置中的内容,我在其中设置了 $config['csrf_regenerate'] = FALSE; 以防止每次提交时重新生成(基于此讨论 Ajax CSRF 403 forbidden codeigniter)。

而我的表单,我使用form_open()form_close(),而不是使用html 表单标签。

Ajax 提交表单:

$('#formData').on('submit', function(e){
    e.preventDefault();
    var formData = new FormData($(this)[0]);

    $.ajax({
        type: 'post',
        cache : false,
        processData: false,
        dataType: 'json',
        url: 'example.com.sg/login/verify',
        data: formData,
        success: function (res) {
            if(res.status == true){
                window.location.href = res.redirect;
            }
        },
        error: function(err){
            console.log(err.responseText)
        }
    });
})

PHP 函数

public function verify(){
    $this->form_validation
        ->set_rules('email', 'Email', 'trim|required|valid_email')
        ->set_rules('password', 'Password', 'trim|required');

    if($this->form_validation->run() == true){
        // do email and password verification
        echo json_encode([ 'status' => true, 'redirect' => base_url('dashboard') ]);
    } else {
        $this->returnFormError($this->form_validation->error_array());
    }
}

如果我将 ajax 类型更改为get,它可以工作,但不能post。如果从控制台查看代码,我的表单会在隐藏输入中包含此 csrf 令牌。

【问题讨论】:

  • 我认为它的信息少了一点——看看@你的浏览器控制台(在 chrome 中是网络选项卡)——这篇文章应该可以帮助你stackoverflow.com/questions/15603561/…——并在标题选项卡中分析你的数据——如果您在那里没有看到 csrf 信息 - 出了点问题
  • @sintakonte 抱歉回复晚了。我已经在标题部分的网络选项卡的控制台中检查了,我可以在那里看到 csrf 信息。

标签: php codeigniter ajaxform csrf-token


【解决方案1】:

// 在 config.php 中 $config['encryption_key'] = '一些密钥'; 先更新这个

【讨论】:

  • 结果是一样的。这个配置有什么用?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-11-06
  • 1970-01-01
  • 2017-05-15
  • 2020-10-10
  • 2017-12-28
  • 2020-12-12
  • 1970-01-01
相关资源
最近更新 更多