【问题标题】:Django CSRF error with AJAX on iOS 8iOS 8 上使用 AJAX 的 Django CSRF 错误
【发布时间】:2018-12-22 17:22:52
【问题描述】:

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

【问题讨论】:

    标签: django csrf-protection tls1.1


    【解决方案1】:

    问题原来是在 iOS 8 中没有传递referer,导致 CSRF 失败。由于页面使用了引用者元标记,因此未传递引用者。

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

    这在 iOS 8 中不起作用。

    【讨论】:

      猜你喜欢
      • 2014-08-21
      • 2011-09-06
      • 2016-08-16
      • 2015-12-12
      • 2018-04-10
      • 2014-09-03
      • 2014-04-26
      • 2012-01-10
      • 2021-02-13
      相关资源
      最近更新 更多