2016-11-28 173 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的引號