首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用AJAX和FORM - CodeIgniter的CSRF保护-不发送

问使用AJAX和FORM - CodeIgniter的CSRF保护-不发送
EN

Stack Overflow用户
提问于 2017-01-13 22:50:07
回答 1查看 554关注 0票数 1

一开始,我只是出于简单的原因关闭了CSRF,以便让我的表单/ ajax工作。现在,当我打开它并尝试使用CSRF的输入和内容时,什么都不会起作用。我的表单没有提交,或者当它提交时,我的整个页面都会刷新,这是我不能允许的。这是我当前的代码。

代码语言:javascript
复制
form method="post">
  <input type="text" name="vip_text_box" id="vip" value="<?php echo $total_amount ?>"> <br><br>
  <input type="submit" id="submit" value="Redeem" onclick="return rebate_amount()">
  <input type="hidden" name="<?php echo $this->security->get_csrf_token_name(); ?>" value="<?php echo $this->security->get_csrf_hash(); ?>">
</form>

和AJAX:

代码语言:javascript
复制
function rebate_amount(){

  var value = document.getElementById('vip').value;
  var datastring = 'vip='+value;
  var url = base_url + '/index.php/home/redeeming_form_value';

  $.ajax({
    type : 'post',
    url : url,
    data: datastring,
    cache: false,
    success: function(html){

      $('#vip_point_redeeming').html(html);

    }
  });
  return false;
}

请记住这一点。当配置文件中的CSRF关闭时,这一切都有效。但是我认为CSRF和form / ajax有一个问题。

EN

回答 1

Stack Overflow用户

发布于 2017-01-14 02:39:35

您还应将csrf_token包含在数据中

500内部服务器错误

您的AJAX请求构造了一个POST操作,但未能提供CSRF令牌。当CodeIgniter收到POST操作时,它将无法找到令牌,并在您有机会运行任何代码之前关闭所有内容,因此您将收到500内部服务器错误

你可以让成为

代码语言:javascript
复制
data :  $("#your_form").serialize();

或

代码语言:javascript
复制
data: {
        '<?php echo $this->security->get_csrf_token_name(); ?>':'<?php echo $this->security->get_csrf_hash(); ?>',

           /*....your data....*/
           vip:document.getElementById('vip').value
       },

你的函数看起来有点

代码语言:javascript
复制
function rebate_amount(){

var url = base_url + '/index.php/home/redeeming_form_value';

$.ajax({
    type : 'post',
    url : url,
    data: {
    '<?php echo $this->security->get_csrf_token_name(); ?>':'<?php echo $this->security->get_csrf_hash(); ?>',

       /*....your data....*/
       vip:document.getElementById('vip').value
    },
    cache: false,
    success: function(html){
      $('#vip_point_redeeming').html(html);
    }
  });
  return false;
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41637261

复制
相关文章

相似问题

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