2016-11-28 176 views
0

我无法在safari隐私浏览中将数据发布到我的django webapp(它适用于Chrome隐身程序)。CSRF不能在django中与Safari浏览器隐私浏览

我没有使用localstorage。

我设置使用

var csrftoken = NMA.getCookie('csrftoken'); 
$.ajax({ 
    type:"POST", 
    contentType: 'application/json; charset=utf-8', 
    beforeSend: function (request, settings) { 
     if (!csrfSafeMethod(settings.type) && !this.crossDomain){ 
      request.setRequestHeader("X-CSRFToken", csrftoken); 
     } 
    }, 
    url: "/profiler/logAnswers/ 
    data: payload, 
    dataType: 'json' 
}).done(... 

的csrftoken cookie设置使用{%csrf_token%}和隐藏的输入存在于<form>

内部我已经检查使用查尔斯请求的X CSRFToken头并设置了csrftoken cookie并设置了X-CSRFToken标头。

我注意到,在私人浏览Safari浏览器添加“DNT = 1”(不跟踪)头,不知道这是否导致问题。 Chrome浏览器隐身请求中不存在DNT = 1。

我在

python2.7 /站点包/ Django的/使用

logger.debug(request.COOKIES) 

中间件/ csrf.py

登录cookie和csrftoken cookie是缺少(和其他几个饼干丢失)。只有4个饼干打印。在最初的请求中有13个cookie存在于charles中。

,因为没有csrftoken这将导致(未设置CSRF的cookie。)的

403禁止错误。

标头中的DNT = 1是做什么的?它是否限制允许的cookie数量?它是否阻止某些类型的Cookie?

+0

看看http://osxdaily.com/2012/08/21/how-to-enable-do-not-track-in -safari-6/ – itzMEonTV

+0

我不想启用或禁用它。如果用户在Safari浏览器中使用私人模式,我希望我的web应用程序能够正常工作。 DNT头似乎改变了django处理请求的方式。 –

回答

0

问题是(为了解决localstorage不可用)我有json对象保存在cookie中。有一个python错误或问题:

https://bugs.python.org/issue27674

导致只有一些饼干是否有字符串中使用引号进行解码。

所以解决办法是更换所有cookie的引号