首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CSRF令牌和Codeigniter 3

CSRF令牌和Codeigniter 3
EN

Stack Overflow用户
提问于 2016-03-27 16:02:55
回答 1查看 4.2K关注 0票数 2

我阅读了很多关于CSRF令牌的内容,但我仍然有几个问题。

例如,我将使用codeigniter 3演示我的情况。

我有登录表单并向/ ajax /login发出ajax请求

在发送此请求之前,我有一个带有生成的csrf令牌的meta标签

代码语言:javascript
复制
<meta name="csrf-token" content="<?= $this->security->get_csrf_hash(); ?>">

代码语言:javascript
复制
$.ajaxSetup({
                headers: {
                    'X-CSRF-TOKEN':  $('meta[name="csrf-token"]').attr('content')
                }
            });

            $.ajax({
              url: ".../ajax/login",
              context: document.body
            }).done(function() {

            });

现在,对于我的ajax请求,token将被添加到x-csrf-token头中。

Ok令牌发送没有问题,我的"if“语句是

代码语言:javascript
复制
$csrf_ajax = $this->input->get_request_header('X-CSRF-Token', TRUE);
$csrf_cookie = $this->security->get_csrf_hash();

if($csrf_ajax == $csrf_cookie){
    echo "OK";
}else{
    echo 'NOT OK';
}

我的CSRF配置是

代码语言:javascript
复制
$config['csrf_protection'] = TRUE;
$config['csrf_token_name'] = 'csrf_protection';
$config['csrf_cookie_name'] = 'csrf';
$config['csrf_expire'] = 3600;
$config['csrf_regenerate'] = TRUE;
$config['csrf_exclude_uris'] = array();

在这3600秒之后,如果我重复同样的请求,我将再次看到"OK“。令牌仍然有效,但在csrf过期时间3600之后应该无效吗?

你能给我解释一下什么时候可以使用每个会话的令牌和每个请求的令牌吗?在哪些情况下?在我的示例中,为什么令牌在此过期时间后仍然有效?

EN

回答 1

Stack Overflow用户

发布于 2020-02-05 13:39:58

我的解决方案是,当用户离开表单超过令牌过期时间并为每个请求启用CSRF时,在请求失败时在AJAX成功中发出GET请求,因为令牌已经过期。然后有一个用最新令牌继续更新的隐藏字段,如果在发出请求时它已经过期,则发出GET请求以获取最新令牌,然后在提交表单的函数上调用单击事件,这意味着该函数必须传递"this“或ID作为部分parameter.This使用户无法在后台实现更新令牌的过程

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36245169

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档