为了账号安全,请及时绑定邮箱和手机立即绑定

CSRF 令牌在 Ajax 中首次提交时有效 - Codeigniter

CSRF 令牌在 Ajax 中首次提交时有效 - Codeigniter

PHP
哔哔one 2022-07-22 15:27:12
下面是我的代码以及我如何使用 Ajax 提交数据。第一次提交时,数据已成功发布,但是,当我再次尝试时,它失败了,我怀疑这是来自无效的 csrf,因为可能会生成新的令牌。我怎么解决这个问题 ?  $('#icon').on('click', '#test', function() {                       var ids = $(this).data('id');                    var csrfName = '<?php echo $this->security->get_csrf_token_name(); ?>',                       csrfHash = '<?php echo $this->security->get_csrf_hash(); ?>';                   var dataJson = { [csrfName]: csrfHash, ids: ids };                    $.ajax({                      url: '<?php echo base_url('client/data'); ?>',                     type: 'POST',                     data: dataJson,                    }).done(function (result) {                     });                     });
查看完整描述

2 回答

?
富国沪深

TA贡献1790条经验 获得超9个赞

我有同样的问题,我通过刷新 csrf 令牌解决了这个问题。新的csrf令牌进入ajax响应表单服务器并将其替换为存储在表单隐藏字段中的旧令牌,当您再次提交时使用新令牌。它解决了我的问题希望您的问题也可以通过这样做来解决,更多使用此链接https ://codeigniter.com/user_guide/libraries/security.html


查看完整回答
反对 回复 2022-07-22
?
回首忆惘然

TA贡献1847条经验 获得超11个赞

对我有用的解决方案是$config['csrf_regenerate'] = TRUE当为每个请求启用 CSRF 时后续的 ajax 发布是在请求失败时在 AJAX Success 中发出 GET 请求,因为令牌已过期。然后有一个隐藏字段继续使用最新令牌进行更新,如果在发出请求时它已过期,您发出 GET REQUEST 以获取最新令牌,然后在提交表单或发出 POST 请求的函数上调用点击事件,这意味着该函数必须传递“this”或ID作为参数的一部分。这使得用户无法在后台实现更新令牌的过程



查看完整回答
反对 回复 2022-07-22
  • 2 回答
  • 0 关注
  • 121 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信