[英]Csrf token is valid just in first submit using ajax
我想使用jquery ajax提交我的表单,可以,但是第一次我单击提交,这是我的代码。
<!-- input code from the form -->
<input type="hidden" name="<?php echo $this->security->get_csrf_token_name(); ?>" value="<?php echo $this->security->get_csrf_hash(); ?>" />
<!-- js code -->
$.ajax({
url: ajaxurls.ask,
type: 'POST',
data: formData,
contentType: false, // The content type used when sending data to the server.
cache: false, // To unable request pages to be cached
processData:false,
success: function (html) {
var data = jQuery.parseJSON(html);
if(data.status == 'ok') {
$('.row_question_form').after(data.response.html);
$('.question_' + data.response.question[0].question_id).hide().fadeIn();
$('#question_form').val('');
$('#thumbnails').empty();
$('#ask_question_messages').empty();
$('#ask_question_messages').html(data.message);
}else if(data.status == 'error'){
$('#ask_question_messages').empty();
$('#ask_question_messages').html(data.message);
}
}
});
您可能会说要设置$config['csrf_regenerate'] = FALSE;
但是在这种情况下,有人可以使用以下应用程序在我的数据库中创建数百条记录:
正确的是,每个CSRF令牌只能提交一个POST,因为它们是一次性使用的。
如果您打算更改服务器端数据 ,则POST是正确的方法。
但是,如果您尝试仅从server读取数据 ,则应使用GET方法。
这在这里很好地解释了 。
如果您希望禁用CSRF更新, 因为不必为每个请求生成新令牌,则可以在CI v3.0中通过设置配置来进行:
$config['csrf_regenerate'] = FALSE;
另一方面,如果您希望获取新令牌并刷新表单以进行新提交,请阅读此方法 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.