- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我使用 varnish 作为 Django 应用程序的前端缓存。这一切都适用于 VCL 配置。我的问题是在用户注销后 csrftoken cookie 不会被删除,从那时起 Varnish 有一个 MISS 响应而不是一个 HIT。在stackoverflow上阅读了一些相关问题后,我有这个注销 View
def logout_view(request):
response = render_to_response('registration/logout.html', {}, context_instance=RequestContext(request))
if request.user.is_authenticated():
logout(request)
if request.GET.get('next', False):
response = HttpResponseRedirect(next)
response.delete_cookie('sessionid')
response.delete_cookie('csrftoken')
return response
Response Headers
Age:0
Cache-Control:max-age=600
Connection:keep-alive
Content-Language:en
Content-Type:text/html; charset=utf-8
Date:Mon, 23 Sep 2013 09:20:43 GMT
Expires:Mon, 23 Sep 2013 09:30:43 GMT
P3P:CP="IDC DSP COR ADM DEVi TAIi PSA PSD IVAi IVDi CONi HIS OUR IND CNT"
Server:nginx/1.4.1
Set-Cookie:sessionid=; expires=Thu, 01-Jan-1970 00:00:00 GMT; Max-Age=0; Path=/
Set-Cookie:csrftoken=; expires=Thu, 01-Jan-1970 00:00:00 GMT; Max-Age=0; Path=/
Transfer-Encoding:chunked
Vary:Cookie, Accept-Language, Host
Via:1.1 varnish
X-Cache:MISS
X-Varnish:1950616479
backend default {
.host = "127.0.0.1";
.port = "8000";
}
sub vcl_recv {
set req.grace = 15s;
if (req.http.Cookie) {
set req.http.Cookie = regsuball(req.http.Cookie, "(^|; ) *__utm.=[^;]+;? *", "\1"); # removes all cookies named __utm? (utma, utmb...) - tracking thing
}
# unless sessionid/csrftoken is in the request, don't pass ANY cookies (referral_source, utm, etc)
if (req.request == "GET" && (req.url ~ "^/static" || (req.http.cookie !~ "flash_sessionid" && req.http.cookie !~ "csrftoken"))) {
remove req.http.Cookie;
}
# normalize accept-encoding to account for different browsers
# see: https://www.varnish-cache.org/trac/wiki/VCLExampleNormalizeAcceptEncoding
if (req.http.Accept-Encoding) {
if (req.http.Accept-Encoding ~ "gzip") {
set req.http.Accept-Encoding = "gzip";
} elsif (req.http.Accept-Encoding ~ "deflate") {
set req.http.Accept-Encoding = "deflate";
} else {
# unknown algorithm
remove req.http.Accept-Encoding;
}
}
}
sub vcl_fetch {
set beresp.ttl = 300s;
set beresp.grace = 15s;
# static files always cached
if (req.url ~ "^/static") {
unset beresp.http.set-cookie;
return (deliver);
}
# pass through for anything with a session/csrftoken set
if (beresp.http.set-cookie ~ "flash_sessionid" || beresp.http.set-cookie ~ "csrftoken") {
return (hit_for_pass);
} else {
return (deliver);
}
}
sub vcl_deliver {
# Add a header to indicate a cache HIT/MISS
if (obj.hits > 0) {
set resp.http.X-Cache = "HIT";
} else {
set resp.http.X-Cache = "MISS";
}
return (deliver);
}
最佳答案
您可以通过如下编辑 vcl_fetch 来解决此问题:
sub vcl_fetch {
# pass through for anything with a session/csrftoken set
if (beresp.http.set-cookie ~ "flash_sessionid" || beresp.http.set-cookie ~ "csrftoken" || beresp.http.set-cookie ~ "sessionid") {
return (hit_for_pass);
} else {
return (deliver);
}
}
Set-Cookie:sessionid
以及。
beresp.http.set-cookie
时,Varnish 只能看到第一个 Set-Cookie header ,所以在你的情况下,Varnish 返回 vcl_deliver 而不是 hit_for_pass。
关于注销后Django无法删除csrftoken,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18956240/
我试图找到以下问题的答案。 什么情况下浏览器会存储多个csrftoken cookies ? 它是正确的还是技术上有效的功能? 以及在 RFC/security 文档中传递数组的位置,或尝试 csrf
有没有办法直接在View中获取csrftoken? 我想获取当前的 csrftoken,但有时会发生变化,因此从 Cookies 获取它不是一个好主意。 有什么办法吗? 谢谢! 最佳答案 我相信您正在
我使用 ajax 调用对 CRUD(使用 csrf token )的薄美味层。一切都像魅力一样,直到我运行该网站,例如Chrome 隐身模式。我不断收到 CUD 请求的 401。 查看请求 cooki
我正在测试发出 POST ajax 请求,但由于没有 csrftoken,我收到了 403。我跟着文档,但是,它仍然不起作用,我发现名为 csrftoken 的 cookie 是 空 , 意思是 $.
我在我的 SPA 中遇到了 Django CSRF token 的奇怪问题。 当我呈现我的应用程序时,我确保使用 ensure_csrf_cookie 设置 token 。当我检查我的 cookie
我有一个带有表单元素的 django 模板,其中包括一些输入文本编辑和一个提交按钮以及一个带有 DropzoneJS 的用户头像 uploader 。问题是我无法将 DropzonJs 放入表单的 d
试图了解安全性。好奇为什么在Django何时 提交表单(POST)时,有2个单独的“元素” 包含相同的csrf token 值: - the csrftoken cookie: COOKIE
我正在与 Django 合作创建一个网站,并遇到了一些关于 CSRF 的问题。我用 django.middleware.csrf.CsrfViewMiddleware并添加 {% csrf_token
csrftoken 存储在哪里? 当我访问 API 端点时(注销 API,它不需要参数): POST /rest-auth/logout/ HTTP/1.1 Host: 10.10.10.105:80
如何通过 python 模块 Requests 传递 csrftoken?这就是我所拥有的,但它不起作用,我不确定将它传递给哪个参数(数据、 header 、身份验证...) import reque
在我的 Django 的 settings.py 中,我有 SESSION_COOKIE_HTTPONLY = True SECURE_CONTENT_TYPE_NOSNIFF = True SECU
我有这样的python代码 s=requests.Session() headers = {'User-Agent': 'Mozilla/5.0'} URL = 'http://test.dev/ap
我开发了一个 Django 文件上传 API,它从客户端接收发布的数据并将数据保存为文件。 根据Django CSRF manual ,HTTP 请求 header 应使用 csrftoken coo
我需要通过基于 Ajax 的发布请求传递 CSRFToken,但不确定如何以最佳方式完成。使用在请求中内部检查 CSRFToken 的平台(仅限 POST 请求) 最初我想把它添加到标题中 $(fun
在Vue.js项目中,如何获取csrftoken? 我试过使用js-cookie,但无法获取: import Cookies from 'js-cookie'; if (Cookies.get('cs
我使用 Django rest 框架作为我的后端 (api),并使用 React 作为前端。 现在我想将表单数据 POST 到后端。我想用csrf保护,因为安全。因此,我尝试使用 Django 发送的
我的问题是,上传文件时显示以下错误。我该如何解决这个问题? 这是我在模板中的代码:
使用: Django 3.x [Django-Filters 2.2.0、graphene-django 2.8.0、graphql-relay 2.0.1] Vue 2.x [Vue-Apollo]
当我们必须发送{% csrf_token %}时,django中的csrftoken-cookie有什么用在每个表单提交中。 {% csrf_token %} Submit Django 处理器总
如何在 Axios.interceptors.request 的配置中获取 Cookies 的 csrftoken? Axios.interceptors.request.use( config
我是一名优秀的程序员,十分优秀!