SameSite Cookie属性丢失

时间:2020-02-03 18:35:53

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

[已更新-参见末尾的评论]

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

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

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

我们在DEV,QA,STAGE环境中对此进行了测试,并且效果很好。在Chrome的开发人员工具(“应用程序”>“ Cookie”)中,您可以检查这些cookie,并查看它们是否都标记为“安全”,并且在SameSite列中没有“无”。

但是,当我们将其滚动到PROD环境时,使用相同的浏览器会得到不同的结果:cookie被标记为Secure,但是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属性已被剥离。

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

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