CSRF 不能在 django 中使用 safari 私人浏览
CSRF not working in django with safari private browsing
我无法 POST 在 safari 隐私浏览中向我的 django webapp 发送数据(它适用于 Chrome 隐身模式)。
我没有使用 localstorage。
我使用
设置 X-CSRFToken header
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>
我已经使用 charles 检查了请求,并且设置了 csrftoken cookie,并且设置了 X-CSRFToken header。
我注意到私人浏览中的 safari 将 "DNT = 1"(不跟踪)添加到 header,不确定这是否导致问题。 chrome 隐身请求中不存在 DNT=1。
我已经在
中记录了 cookie
python2.7/site-packages/django/middleware/csrf.py
使用
logger.debug(request.COOKIES)
并且 csrftoken cookie 丢失(并且其他几个 cookie 丢失)。只打印了 4 个饼干。如 charles 中所示,初始请求中存在 13 个 cookie。
由于没有 csrftoken,这会导致
Forbidden (CSRF cookie not set.) 403 error.
header 中的 DNT=1 有什么作用?它是否限制允许的 cookie 数量?它会阻止某些类型的 cookie 吗?
问题是(为了绕过 localstorage 不可用)我有 json 个对象保存在 cookie 中。存在 python 错误或问题:
如果字符串中有引号,则只会解码部分 cookie。
所以解决方案是替换所有 cookie 中的引号
我无法 POST 在 safari 隐私浏览中向我的 django webapp 发送数据(它适用于 Chrome 隐身模式)。
我没有使用 localstorage。
我使用
设置 X-CSRFToken headervar 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>
我已经使用 charles 检查了请求,并且设置了 csrftoken cookie,并且设置了 X-CSRFToken header。
我注意到私人浏览中的 safari 将 "DNT = 1"(不跟踪)添加到 header,不确定这是否导致问题。 chrome 隐身请求中不存在 DNT=1。
我已经在
中记录了 cookiepython2.7/site-packages/django/middleware/csrf.py
使用
logger.debug(request.COOKIES)
并且 csrftoken cookie 丢失(并且其他几个 cookie 丢失)。只打印了 4 个饼干。如 charles 中所示,初始请求中存在 13 个 cookie。
由于没有 csrftoken,这会导致
Forbidden (CSRF cookie not set.) 403 error.
header 中的 DNT=1 有什么作用?它是否限制允许的 cookie 数量?它会阻止某些类型的 cookie 吗?
问题是(为了绕过 localstorage 不可用)我有 json 个对象保存在 cookie 中。存在 python 错误或问题:
如果字符串中有引号,则只会解码部分 cookie。
所以解决方案是替换所有 cookie 中的引号