我正在尝试对Django函数进行AJAX调用,但已开始在iOS 8中收到CSRF验证失败的错误。它可以与最新的iOS一起使用,并且可以与iOS 8一起使用。
这可能与TLS的最新更新有关。我的主机最近不建议使用TLS 1.0和TLS_RSA_WITH_3DES_EDE_CBC_SHA。
我将CSRF令牌添加为post参数。如果我将功能(服务器端)设置为@csrf_exempt,则该调用有效,但是我显然不想取消安全性。
我仅在Safari中对此进行了测试。我正在使用Django 1.5.2。
HTML:
# this creates an input with the CSRF token as its value
<div id = "csrf_token" class = "hidden">{% csrf_token %}</div>
Javascript:
csrfmiddlewaretoken = $('#csrf_token input').val();
$.ajax({
type: "POST",
url: "<my_url>",
data: {"csrfmiddlewaretoken":csrfmiddlewaretoken},
success: function(data){
alert("ok");
}
,error: function(xhr, status, error) {
alert("error " + xhr.responseText);
}
});
对此有任何解决方案还是必须停止支持iOS 8?我仍然有一些使用它的用户。
答案 0 :(得分:0)
原来的问题是,iOS 8中没有传递引荐来源,这导致CSRF失败。由于页面使用了Referrer元标记,因此没有传递Referer。
<meta name="referrer" content="always">
<meta name="referrer" content="unsafe-url">
这在iOS 8中不起作用。