【问题标题】:SameSite cookie property lostSameSite cookie 属性丢失
【发布时间】:2020-02-10 23:16:09
【问题描述】:

[更新 - 见最后评论]

Google 将更改其 Chrome 浏览器的行为,以便 cookie 在托管在另一个域的 IFRAME 中时不再起作用,除非 cookie 明确设置为 SameSite = None 和 Secure。

为此,我们在 ASP.NET MVC 代码中进行了此更改。我们有一些关于何时设置的逻辑(仅适用于我们同意合作的合作伙伴),所以我们有这个条件逻辑:

if (isSameSiteCookieEnforced)
{
    cookie.SameSite = SameSiteMode.None;
    cookie.Secure = true;
}

我们在 DEV、QA、STAGE 环境中对此进行了测试,它运行良好。在 Chrome 的开发者工具(Application > Cookies)中,您可以检查 cookie 并看到它们都被标记为 Secure,并且在 SameSite 列中没有。

但是,当我们将此应用到我们的 PROD 环境时,使用同一个浏览器会得到不同的结果:cookie 被标记为安全,但 SameSite 值为空。

我们检查了什么:

  • 负载均衡器:我们将其隔离并直接导航到单个 Web 服务器,结果相同
  • 安装的 .NET 框架:在所有环境中,我们都安装了 4.7.2 和 4.8
  • 解决 .NET 框架:在所有环境中,web.config 规定 4.7.2
  • 代码:我们从 PROD 中检索了相关的 DLL 并使用 ILSPY 进行了检查。它包含上面的代码

目前无法解释 cookie 如何丢失“SameSite”属性。导航到 chrome://flags 并在 SameSite 上进行过滤,我们将这三个设置显示为“默认”,因此 Chrome 不应影响与一个环境不同的任何内容到另一个。

更新

我们的 ASP.NET MVC 应用程序使用 IHttpModule,作为 EndRequest 方法的最后一步之一,我们跟踪 cookie。您可以清楚地看到它们设置为 SameSite=None 和 Secure=true。但是,当它们到达浏览器时,SameSite 属性已被剥离。

【问题讨论】:

    标签: asp.net-mvc google-chrome cookies samesite


    【解决方案1】:

    如果您以是否强制执行新的 SameSite 行为为条件,则需要使用 chrome://flags 条目 same-site-by-default-cookies 和 cookies-without-same-site-must 来测试该行为-be-secure 设置为“启用”和“禁用”。如果它们设置为“默认”,则无法判断行为是什么。它可以打开或关闭,具体取决于启动时确定的随机种子,因为这些功能目前处于 Beta 版的现场试验(A/B 测试)中。在此处查看“启动时间线”中的第二个项目符号列表:https://www.chromium.org/updates/same-site

    【讨论】:

    • @chilly - 我没有测试浏览器是否强制执行此操作。我们有服务器端业务规则,规定何时设置 SameSite=None 和 Secure=true(参见原始帖子中的代码 sn-p)。我们跟踪它何时执行(未显示)。我看到确认服务器在 STAGE 和 PROD 中设置这些属性的跟踪消息,但浏览器显示:Stage = SameSite=None&Secure;产品 = SameSite={blank}&Secure.
    • isSameSiteCookieEnforced 是如何计算的?
    • isSameSiteCookieEnforced 的作用我认为无关紧要,但我们已经验证它工作正常。在 ASP 管道的最后,就在返回响应之前,我们追踪 cookie,我们可以看到它们都按预期设置。我会把这个添加到原始帖子中。
    • 当您说“我们使用相同的浏览器得到不同的结果”时,您的意思是您实际上使用的是同一个 Chrome 实例,还是您使用的是两个具有相同版本的 Chrome 实例数字?就像我上面说的,标志应该设置为“启用”或“禁用”以保证行为,因为“默认”可能意味着任何一个(取决于现场试验配置,在不同的设备上可能有所不同)。
    • 另一件事是:如果您发现服务器认为它通过网络发送的内容与浏览器认为它看到的内容之间存在差异,那么捕获所有网络活动并检查请求/响应标头。见chromium.org/updates/same-site/…
    【解决方案2】:

    发现问题 - 原来我们缺少 Windows 补丁。

    【讨论】:

    • 缺少什么 Windows 补丁?
    猜你喜欢
    • 2020-12-15
    • 1970-01-01
    • 2020-07-04
    • 2020-07-13
    • 2020-04-17
    • 2020-12-13
    • 2021-01-11
    • 1970-01-01
    • 2019-11-21
    相关资源
    最近更新 更多