[英]Codeigniter (CSRF) jQuery ajax problem
我在这里遇到了一个问题,当我尝试使用ajax(POST)发布内容时,我一直收到错误。 我知道CSRF给了我这些问题,并且我一直在尝试寻找解决方案。 但是,我希望有人可以帮助我!
这是我一直得到的错误(来自谷歌浏览器检查员),
* 无法加载资源:服务器响应状态为500(内部服务器错误)XHR已完成加载:“http:// localhost / woho / ajax / images”。 *
PHP(控制器)
class Ajax extends CI_Controller {
function images() {
echo 'Hello World';
}
}
使用Javascript
var ID = $(".imageWrap:last").attr("id");
var baseurl = "http://localhost/woho/";
var doScroll = 1;
var cct = $.cookie('csrf_cookie_name');
if (location.href == baseurl) {
$(window).scroll(function(){
if ($(window).scrollTop() > $('body').height() / 2) {
if(doScroll == 1) {
$.post(baseurl + 'ajax/images',{'id' : ID, 'csrf_token_name': cct}, function(data) {
alert(data);
$("#wrapper_content").append(data);
ID++;
});
}
}
});
}
我的CCT var来自javascript给了我正确的令牌或“哈希”但是当javascript发送ajax请求时,codeigniter返回一个错误,如,
遇到错误不允许您请求的操作。
我怎样才能解决这个问题? 我是否需要在控制器中验证CSRF令牌或其他内容?
我正在使用Codeigniter 2.0.3
试试(javascript):
var ID = $(".imageWrap:last").attr("id");
var baseurl = "http://localhost/woho/";
var doScroll = 1;
var cct = $.cookie("<?php echo $this->config->item("csrf_cookie_name"); ?>");
if (location.href == baseurl) {
$(window).scroll(function(){
if ($(window).scrollTop() > $('body').height() / 2) {
if(doScroll == 1) {
$.post(baseurl + 'ajax/images',{'id':ID,'<?php echo $this->security->get_csrf_token_name(); ?>': cct}, function(data) {
alert(data);
$("#wrapper_content").append(data);
ID++;
});
}
}
});
}
检查/application/config/config.php中$config['csrf_token_name']
,因为默认设置为csrf_test_name而不是csrf_token_name 。
如果你不想在Javascript中使用PHP代码,这个决定。
$.ajax({
url: 'some_url',
type: 'POST',
data: {csrf_test_name: $.cookie('csrf_cookie_name')}
});
这段代码工作正常。
如果使用form_open("/some",'id="some_form"')
和form_close()
,则CI会创建一个隐藏的输入,用于保存csrf_token_name及其值。
因此,在您的AJAX请求中,您可以通过序列化并发送表单来获取表单!
例如:
<script>
var _form = $("#some_form").serializeArray();
$.ajax({
data: _form,
type: 'post',
url: '<?php echo base_url();?>some',
async: true,
success: function(output){
alert(output);
},
complete: function(output){},
fail: function(err){}
});
</script>
CSRF总是我的问题,通过这种方法,它解决了!
它可能会迟到,但我发现这种完美的解决方案,但应该工作
if (isset($_SERVER["REQUEST_URI"]))
{
if(stripos($_SERVER["REQUEST_URI"],'/mypage') === FALSE)
{
$config['csrf_protection'] = TRUE;
}
else
{
$config['csrf_protection'] = FALSE;
}
}
else
{
$config['csrf_protection'] = TRUE;
}
//在config.php文件中ci 2. *
从这篇文章找到解决方案
只需遵循以下代码:
$.ajax({
type : 'post',
url : 'Your URL',
data : {
id: id,
'<?php echo $this->security->get_csrf_token_name(); ?>' : '<?php echo $this->security->get_csrf_hash(); ?>'
},
datatype: 'json',
success : function(data){}
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.