使用AJAX和&amp ;;的CSRF保护FORM - CodeIgniter - 不发送

时间:2017-01-13 14:50:07

标签: php ajax forms codeigniter csrf

一开始我为了简单起见而关闭了我的CSRF,使我的表单/ ajax工作。现在,当我打开它并尝试使用CSRF的输入和内容时,没有任何工作可行。我的表单没有提交,或者当我的整个页面刷新时,我不能让它发生。这是我目前的代码。

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:

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存在问题。

1 个答案:

答案 0 :(得分:2)

您还应该在csrf_token中加入数据

500内部服务器错误

  

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

要么

data :  $("#your_form").serialize();

data: {
        '<?php echo $this->security->get_csrf_token_name(); ?>':'<?php echo $this->security->get_csrf_hash(); ?>',

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

您的功能看起来有点

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;
}