Flask cookie 没有 SameSite 属性
Posted
技术标签:
【中文标题】Flask cookie 没有 SameSite 属性【英文标题】:Flask cookies do not have the SameSite attribute 【发布时间】:2020-07-13 18:35:00 【问题描述】:最近由于 Chrome 80,我们注意到没有 SameSite=None 和 Secure 属性的 cookie 不会在 Chrome 浏览器中设置。
目前,我使用 Flask-JWT-Extended 库为我的后端生成我的 cookie,但即使它在 set_cookies 函数中有 samesite=None,cookie 仍然没有在浏览器中设置。 我使用 Postman 发送请求并查看了我的 cookie 并获得了以下 cookie:
access_token_cookie=my_token; Path=/; Domain=127.0.0.1; Secure; HttpOnly;
我尝试过手动设置标题:
resp.headers.add('Set-Cookie', 'access_token_cookie=bar; SameSite=None; Secure')
但即使在手动设置 cookie 之后,我仍然得到以下没有 SameSite 属性的 cookie:
access_token_cookie=bar; Path=/user; Domain=127.0.0.1; Secure;
我想知道现在是否有办法在 cookie 中设置 SameSite 属性。
编辑 这是我的网站代码。
列表项 access_token = create_access_token(identity=user.username)
resp = jsonify("username": user.username,
"user_type": user.roles
)
resp.headers.add('Set-Cookie', 'access_token_cookie=' + access_token + '; SameSite=None; Secure')
return resp
【问题讨论】:
【参考方案1】:你认为Chrome now requires cookies marked SameSite=None
to also be marked Secure
是正确的:
任何请求
SameSite=None
但未标记为Secure
的 cookie 都将被拒绝。
但是,您为 cookie 指定的 Domain
(127.0.0.1
) 表示请求的服务器来源是不安全的(即使用 http
方案),您应该注意,由于一项功能称为 Strict Secure Cookies,尝试从不安全的来源设置 Secure
cookie 在 Chrome 58+ 中失败:
这增加了对标有“安全”属性的 cookie 的限制。目前,不安全(例如 HTTP)的来源无法访问安全 cookie。但是,不安全的来源仍然可以添加安全 cookie、删除它们或间接驱逐它们。此功能会修改 cookie jar,以便不安全的来源无法以任何方式接触安全 cookie。
因此,如果您想在现代 Chrome 中设置标记为 SameSite=None
的 cookie,则来源需要是安全的(即使用 https
方案)。
【讨论】:
【参考方案2】:为了做到这一点,我使用make_response
没有任何 Flask 插件:
from flask import make_response, render_template
resp = make_response(render_template("index.html"))
resp.set_cookie('pwd', pwd, samesite="Lax")
重要的部分是resp.set_cookie('pwd', pwd, samesite="Lax")
。 samesite
参数允许您设置 cookie 的 SameSite。
【讨论】:
【参考方案3】:Chrome 会忽略通过不安全通道接收的标记为 Secure
的 cookie。
因此,您可以通过https
进行测试或删除Secure
属性
【讨论】:
您好 Nazar,删除安全选项后,cookie 仍然没有设置。尽管在创建 cookie 时指定了 SameSite 属性,但不会显示它 嗨,Bryan,请您提供一个设置 cookie 的代码(视图函数)吗? 嗨 Nazar 我用我使用的代码更新了我的问题。以上是关于Flask cookie 没有 SameSite 属性的主要内容,如果未能解决你的问题,请参考以下文章
如何解决来自 Google Chrome 的此警告? Cookie... `SameSite=None` 但没有 `Secure`
Springboot应用中设置Cookie的SameSite属性
AspNet Core Identity,如何设置options.Cookie.SameSite?