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属性

SameSite cookie 被阻止

AspNet Core Identity,如何设置options.Cookie.SameSite?

使用 SameSite 和 Secure 属性设置 Google Tag Manager cookie

如何设置 SameSite 属性?