iOS 上 AJAX 的 Django CSRF 错误 8

Django CSRF error with AJAX on iOS 8

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

问题原来是没有在iOS 8 中传递referer,这导致CSRF 失败。未传递引荐来源网址,因为该页面正在使用引荐来源网址元标记。

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

这在 iOS 8.

中不起作用