谷歌研发一个一桩冤案不是第一次见,还是要解决的

日期: 栏目:文章分享 浏览:700 评论:0

1、背景

最近在公司研发群,发现有人反馈内部网站跨域访问莫明的出现站点重定向问题,并且都是谷歌80 版本之后出现。

准确的说是78版本之后,并且可能存在同一版本不同人的浏览器表现不同,作者本人也升级了谷歌版本为最新,没有发现这个问题。换句话说这TM就是一桩冤案。作为一个苦逼的研发Chrome 自动升级后,本地项目都无法访问,冤案不是第一次见,还是要解决的。

2、探索

重定向的原因无非就是没有Chrome 自动升级后,本地项目都无法访问,导致没有登录态。沿着这个思路我们展开了一系列的探索。

2.1 探索1,谷歌设置,允许第三方

结果:失败,没有解决问题

2.2 探索2,浏览器改变设置

结果:成功解决,但是,这个方案有点局限,如果所有人都遇到这个问题,你还需要给每一个人都去说一遍,你需要打开://flags/ ,设置,天,太麻烦了。出口堵住太麻烦了,当然这也是一种临时方案,所以我们还是要像一个简单点的方案,就是从来源去解决。

2.3 探索3,set-改变设置

网站跨域访问莫明的出现站点重定向,源头在哪,就是在统一登录的地方,如果我们在统一登录的地方设置了,哪是不是就在所有用到当前登录态的地方就解决了这个问题。怎么操作了。操作很简单,其实就是在报文里面set-,添加=None;

结果:完美解决,一劳永逸。不要给所有人解释你需要怎么怎么做了。

3、原因

最后我回过来思考一下为什么会出现这样的原因了。大家发现在探索的过程中,基本都是改变了的设置,才成功解决的。 的属性用来限制第三方 ,从而减少安全风险。它可以设置三个值:

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

Set-Cookie: CookieName=CookieValue; SameSite=Strict;
复制代码

这个规则过于严格,可能造成非常不好的用户体验。比如,当前网页有一个 链接,用户点击跳转就不会带有 的 ,跳转过去总是未登陆状态。

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

Set-Cookie: CookieName=CookieValue; SameSite=Lax;
复制代码

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

网站可以选择显式关闭属性,将其设为None。不过,前提是必须同时设置属性( 只能通过 HTTPS 协议发送),否则无效。

Set-Cookie: widget_session=abc123; SameSite=None; Secure
复制代码

升级到80版本之后(准确的说是78版本之后),的属性默认值由None变为Lax,这个才是本次事件的根本原因。

这个问题在社区也是有讨论的,讨论地址:

标签:

评论留言

我要留言

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。发布前请先查看评论规则:点我查看