Chrome 80 中 Iframe 跨域 Cookie 的 Samesite (用来防止CSRF攻击和用户追踪)
遇到的问题:
新项目要嵌入之前的一个项目,而且该被嵌入项目之前提供给第三方使用,他们也是用的iframe。以前都是好的,但是现在发现要是iframe的地址和父级的地址不同源,项目登录时无法设置cookie。
从 Chrome 51 开始,浏览器的 Cookie,新增加了一个 SameSite属性,用来防止 CSRF攻击和用户追踪。该设置当前默认是关闭的,但在 Chrome 80 之后,该功能默认已开启。所以当你无法使用某些网站第三方登录功能的时候,请查看一下是否受到了该设置的影响。
*对于使用者,快速解决方案:
1.方案1. 打开 Chrome
设置,将 chrome://flags/#same-site-by-default-cookies
禁用,然后重启浏览器。
2. 方案2. 使用低版本浏览器,可选择70版。
对于开发者,解决方案:
- 方案1. 将 SameSite
属性值改为 None
, 同时 将 secure
属性设置为
true
。且需要将后端服务域名必须使用 https
协议访问。 - 由于设置 SameSite = None
,有 SCRF
风险,所以,最佳方案是用 token
代替 Cookie
方式作验证。