asp.net-mvc - SameSite cookie 属性丢失
问题描述
[更新-见最后评论]
Google 将更改其 Chrome 浏览器的行为,以便 cookie 在托管在另一个域的 IFRAME 中时不再起作用,除非 cookie 明确设置为 SameSite = None 和 Secure。
为此,我们在 ASP.NET MVC 代码中进行了此更改。我们有一些关于何时设置的逻辑(仅适用于我们同意合作的合作伙伴),所以我们有这个条件逻辑:
if (isSameSiteCookieEnforced)
{
cookie.SameSite = SameSiteMode.None;
cookie.Secure = true;
}
我们在我们的 DEV、QA、STAGE 环境中对此进行了测试,它运行良好。在 Chrome 的开发人员工具(应用程序 > Cookies)中,您可以检查 cookie 并查看它们都标记为安全,并且在 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 属性已被剥离。
解决方案
如果您以是否强制执行新的 SameSite 行为为条件,您将需要使用 chrome://flags 条目 same-site-by-default-cookies 和 cookies-without-same-site-must-be- 来测试该行为安全设置为“启用”和“禁用”。如果它们设置为“默认”,则无法判断行为是什么。它可以打开或关闭,具体取决于启动时确定的随机种子,因为这些功能目前处于 Beta 版的现场试验(A/B 测试)中。在此处查看“启动时间表”中的第二个项目符号列表:https ://www.chromium.org/updates/same-site
推荐阅读
- javascript - 带有 jQuery 和语义 UI 的条件字段
- excel - 如果一行中的 2 个单元格为真,则打印该行中的另一个单元格
- android - PagedList 获取新数据时收到通知
- amazon-web-services - 多个应用程序的 SSL (https)(在多个子域上)
- json - 在 Angular 2+ 中重构 JSON 响应
- python - 如何迭代 Tensorflow 中的张量?
- reactjs - 警告:它已定义但从未使用过
- swift - 如何将 SCNRenderer 与现有的 MTLCommandBuffer 结合起来?
- html - 有位置的元素:绝对;由于 CSS 动画而跳跃
- c++11 - 将数据保存在 .exe 文件中