缘起

有用户反映,之前正常使用的站点,出现无法登录情况。

调查

  1. 用户使用场景,使用iframe嵌套了我们的Web,跨在一个跨域
  2. 用户升级了最新的Chrome 80
  3. 根据浏览记录看到,Post请求没有发送Cookie
  4. Chrome console 提示:A cookie associated with a cross-site resource at http://xxxx/ was set without the SameSite attribute. It has been blocked, as Chrome now only delivers cookies with cross-site requests if they are set with SameSite=None and Secure. You can review cookies in developer tools under Application>Storage>Cookies and see more details at https://www.chromestatus.com/feature/5088147346030592 and https://www.chromestatus.com/feature/5633521622188032.

原因

Chrome 80 版本升级,提升了Cookie SameSite的默认安全等级,强推 SameSite Cookie

  • Chrome <80 默认值:SameSite=None;请求带Cookie
  • Chrome >=80 默认值:SameSite=Lax;请限制带Cookie

什么是SameSite

SameSite 是 Chrome 51 版本为浏览器的 Cookie 新增的了一个属性, SameSite 阻止浏览器将此 Cookie 与跨站点请求一起发送。其主要目标是降低跨源信息泄漏的风险。同时也在一定程度上阻止了 CSRF(Cross-site request forgery 跨站请求伪造)。

Cookie 的SameSite属性用来限制第三方 Cookie,从而减少安全风险。

它可以设置三个值:

  • Strict
  • Lax
  • None

Strict

Strict最为严格,完全禁止第三方 Cookie,跨站点时,任何情况下都不会发送 Cookie。换言之,只有当前网页的 URL 与请求目标一致,才会带上 Cookie。

Set-Cookie: username=cnblogs; SameSite=Strict;

Lax

Lax规则稍稍放宽,大多数情况也是不发送第三方 Cookie,但是导航到目标网址的 Get 请求除外。

Set-Cookie: username=cnblogs; SameSite=Lax;

导航到目标网址的 GET 请求,只包括三种情况:链接,预加载请求,GET 表单。详见下表。

请求类型 示例 正常情况Lax
链接 发送 Cookie 发送 Cookie
预加载 发送 Cookie 发送 Cookie
GET 表单 发送 Cookie 发送 Cookie
POST 表单 发送 Cookie 不发送
iframe <iframe src="..."></iframe> 发送 Cookie 不发送
AJAX $.get("...") 发送 Cookie 不发送
Image <img src="..." > 发送 Cookie 不发送

设置了Strict或Lax以后,基本就杜绝了 CSRF 攻击。当然,前提是用户浏览器支持 SameSite 属性。

None

Chrome 计划将Lax变为默认设置。这时,网站可以选择显式关闭SameSite属性,将其设为None。不过,前提是必须同时设置Secure属性(Cookie 只能通过 HTTPS 协议发送),否则无效。

只设置SameSite=None,非https协议时,None无效,SameSite=Lax;

Set-Cookie: username=cnblogs; SameSite=None

设置SameSite=None,协议Https时,None有效

Set-Cookie: username=cnblogs; SameSite=None; Secure

Chrome策略更新

在旧版浏览器,如果 SameSite 属性没有设置,或者没有得到运行浏览器的支持,那么它的行为等同于 None,Cookies 会被包含在任何请求中——包括跨站请求。

chrome <80, 默认SameSite=None:

Set-Cookie: username=cnblogs;

chrome:
Set-Cookie: username=cnblogs; SameSite=None;

但是,在 Chrome 80+ 版本中,SameSite 的默认属性是 SameSite=Lax。换句话说,当 Cookie 没有设置 SameSite 属性时,将会视作 SameSite 属性被设置为Lax 。如果想要指定 Cookies 在同站、跨站请求都被发送,那么需要明确指定 SameSite 为 None。具有 SameSite=None 的 Cookie 也必须标记为安全并通过 HTTPS 传送。

chrome >80,默认SameSite=Lax

Set-Cookie: username=cnblogs;

chrome:
Set-Cookie: username=cnblogs; SameSite=Lax;

如何解决

个人用户解决

站点不支持,个人可以设置浏览器,禁用SameSite=Lax设置解决:

Chrome 80 解决步骤:

  1. 地址栏:chrome://flags
  2. 搜索:SameSite by default cookies
  3. 选择:disabled
  4. 重启浏览器

Asp.Net站点解决

net 4.7.2+

  1. 需要netframeword 4.7.2 or 4.8
  2. 安装补丁:KB补丁

Web.Config 设置

<configuration>
<system.web>
<compilation targetFramework="4.7.2"/>
<httpRuntime targetFramework="4.7.2"/>
<httpCookies sameSite="[Strict|Lax|None|Unspecified]" requireSSL="[true|false]" />
<anonymousIdentification cookieRequireSSL="false" /> <!-- No config attribute for SameSite -->
<authentication>
<forms cookieSameSite="Lax" requireSSL="false" />
</authentication>
<sessionState cookieSameSite="Lax" /> <!-- No config attribute for Secure -->
<roleManager cookieRequireSSL="false" /> <!-- No config attribute for SameSite -->
<system.web>
<configuration>
注意:
  1. sessionState 设置: ASP.NET_SessionId Cookie
  2. httpCookies 设置:普通Cookie
  3. cookieRequireSSL="True",必须是Https协议

aspnetcore 3.1

ConfigureServices:

services.Configure<CookiePolicyOptions>(options =>
{
options.MinimumSameSitePolicy = SameSiteMode.None;
});

Reference

https://docs.microsoft.com/en-us/aspnet/samesite/system-web-samesite

https://docs.microsoft.com/en-us/aspnet/core/security/samesite?view=aspnetcore-3.1

http://www.ruanyifeng.com/blog/2019/09/cookie-samesite.html

https://cloud.tencent.com/developer/article/1590217

升级到Chrome 80+的SameSite问题,及Asp.net站点修改的更多相关文章

  1. Chrome 80 & SameSite & cookie

    Chrome 80 & SameSite & cookie chrome://settings/help https://developers.google.com/web/updat ...

  2. (1-1)文件结构的升级(Area和Filter知识总结) - ASP.NET从MVC5升级到MVC6

    ASP.NET从MVC5升级到MVC6 总目录 MVC5项目结构 带有Areas和Filter的项目结构 一般来说,小的MVC项目是不考虑领域的,但是,如果是稍微复杂一点的项目,往往是需要领域这个概念 ...

  3. Upcoming Browser Behavior Changes & Chrome & SameSite

    Upcoming Browser Behavior Changes & Chrome & SameSite Chrome 80 https://auth0.com/blog/brows ...

  4. chrome升级后LODOP打印插件无法使用

    今天帮朋友使用LODOP实现一个套打程序时,发现LODOP打印插件在chrome下始终无法使用.分析后发现是自己才升级了chrome,chrome新版默认是禁用npapi的,因此需要手动启用一下,启用 ...

  5. Chrome80调整SameSite策略对IdentityServer4的影响以及处理方案(翻译)

    首先,好消息是Goole将于2020年2月份发布Chrome 80版本.本次发布将推进Google的"渐进改良Cookie"策略,打造一个更为安全和保障用户隐私的网络环境. 坏消息 ...

  6. Cookie SameSite属性介绍及其在ASP.NET项目中的应用

    一.Cookie SameSite属性介绍 就像大家已经知道的,一旦设置Cookie之后,在Cookie失效之前浏览器会一直将这个Cookie在后续所有的请求中都传回到Server端.我们的系统会利用 ...

  7. chrome禁止三方cookie,网站登录不了怎么办

    背景 新版chrome(80+)浏览器默认屏蔽所有三方cookie已经不是什么新闻了,具体原因这里不去深究,有大量相关文章介绍,由于目前许多网站都依赖三方cookie,因此该特性的推出还是造成了一些的 ...

  8. TODO:软件升级的那些事

    TODO:软件升级的那些事 软件升级,指软件从低版本向高版本的更新.由于高版本常常修复低版本的部分BUG,所以经历了软件升级,一般都会比原版本的性能更好,得到优化的效果,用户也能有更好的体验. 最近常 ...

  9. Windows 10 Threshold 2 升级记录

    昨天(11月17日)升级到Windows 10 Threshold 2版本.我的使用的设备是Surface Pro 3,4G内存,128G硬盘. Threshold 2是作为一个Windows系统更新 ...

随机推荐

  1. Jmeter之正则表达式提取

    一.正则表达式提取器: 1.比如需要提取如下响应文本中的 “<title> 孤舟点点 - 博客园找找看</title>” 里面的 “孤舟点点 - 博客园找找看”: 2.设置正则 ...

  2. grep显示前后几行信息

    显示foo及前5行 1 grep -B 5 foo file 显示foo及后5行 1 大专栏  grep显示前后几行信息ode"> grep -A 5 foo file 显示 file ...

  3. Python测试开发-创建模态框及保存数据

    Python测试开发-创建模态框及保存数据 原创: fin  测试开发社区  前天 什么是模态框? 模态框是指的在覆盖在父窗体上的子窗体.可用来做交互,我们经常会看到模态框用来登录.确定等等,到底是怎 ...

  4. LeetCode~941.有效的山脉数组

    941.有效的山脉数组 给定一个整数数组 A,如果它是有效的山脉数组就返回 true,否则返回 false. 让我们回顾一下,如果 A 满足下述条件,那么它是一个山脉数组: A.length > ...

  5. Pycharm2019.2激活至2089年

    PyCharm作为日常开发常用工具,过段时间就需要再次激活是个问题,今早找到个方法很实用,亲测也是有效的.激活成功如下图: 具体步骤如下: 1. 下载破解补丁和激活码[小哈学Java公众号提供],使用 ...

  6. 从头认识js-HTML中使用JavaScript

    <script>元素 在HTML页面中插入Javascript的主要办法就是使用<script>元素,HTML4.01为<script>定义了下列6个属性. 1.a ...

  7. opencv +数字识别

    现在很多场景需要使用的数字识别,比如银行卡识别,以及车牌识别等,在AI领域有很多图像识别算法,大多是居于opencv 或者谷歌开源的tesseract 识别. 由于公司业务需要,需要开发一个客户端程序 ...

  8. JUC-八锁现象和不安全锁

    1,被 synchronized 修饰的方法,锁的对象是方法的调用者(实例对象) 2,被 static 修饰的方法,锁的对象就是 Class模板对象,这个则全局唯一 问题7: 一个普通同步方法,一个静 ...

  9. 一步步打造自己的纯CSS单标签图标库

    图标作为网页设计中的一部分,其在凸显网页重要元素特性,视觉交互.引导以及网页装饰等充当的角色作用举足轻重.由于图标普遍具有尺寸小的特点,在项目实践时不宜将每个图标作为单个图片元素进行加载,这会增加Ht ...

  10. 简单说 用CSS做一个魔方旋转的效果

    说明 魔方大家应该是不会陌生的,这次我们来一起用CSS实现一个魔方旋转的特效,先来看看效果图! 解释 我们要做这样的效果,重点在于怎么把6张图片,摆放成魔方的样子,而把它们摆放成魔方的样子,重点在于用 ...