【问题标题】:Flask cookies do not have the SameSite attributeFlask cookie 没有 SameSite 属性
【发布时间】: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

【问题讨论】:

    标签: javascript python flask cookies jwt


    【解决方案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 我用我使用的代码更新了我的问题。
        猜你喜欢
        • 2020-04-17
        • 2020-12-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-07-04
        • 2020-12-13
        • 2021-01-11
        • 1970-01-01
        相关资源
        最近更新 更多