iOS 8上AJAX的Django CSRF错误

时间:2018-07-14 13:58:59

标签: django csrf-protection tls1.1

我正在尝试对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?我仍然有一些使用它的用户。

1 个答案:

答案 0 :(得分:0)

原来的问题是,iOS 8中没有传递引荐来源,这导致CSRF失败。由于页面使用了Referrer元标记,因此没有传递Referer。

<meta name="referrer" content="always">
<meta name="referrer" content="unsafe-url">

这在iOS 8中不起作用。