LMLPHP后院

Chrome 不携带 Cookie 问题的曲线救国方法院内

maybe yes 发表于 2022-08-01 10:26

关于 Chrome 不携带 Cookie 这个问题的曲线救国。

我在很早的文章,一年多以前就喷过,当时乃至现在都觉得这个行为是没有任何意义的,或许有那么一丢丢的意义就是:A 网站上有 B 网站的 图片,这样 B 网站就不知道这个用户是谁;这个的前提是 B 网站是顶级的网站,否则 B 网站的用户同时访问 A 网站,并且 A 站里面还有 B 网站的图片的情况概率为 0。那请问,这样的网站全球有几个,最大的网站 Google 就是啊,Google 这样做难道是给自己找麻烦?

不明白缘由的,请看我另一篇文章 新版本 Chrome 浏览器 POST 请求不携带 Cookie 问题。这篇文章列举了 7 种情况,但是没有列举 script 是不是携带,测试发现 script 不携带。我为什么说这样做意义不大,首先一点就是上面说的,概率为 0。第二一点就是,如果 A 网站里面加入了 B 网站的 script,人家要做到携带 Cookie - 不难。生成一个 link 或者 form get 就可以了。

我的前面一篇文章提到 link 和 get 表单请求是携带的,我测试发现 link 确实是携带。既然 link 携带,你的站加了我的站的 JavaScript,那这样做这个隐私策略有个毛线意思。那直接阻止不允许加载别的域名的 script 请求不就万事大吉了,这样 web 也就是完蛋了!

不过,这样做也许有一点意义,就是没有别的站的 script 的时候,有点隐私作用,但是这个的代价太大了,直接让市面上大量的 Web 项目出现不能正常运行。我觉得 Google 这样做害了很多人。有其他更好的解决办法。

第一:只有是 图片 的情况下不携带(这个情况比较普遍),而 POST 请求,Iframe,Ajax 都是常用的伎俩,应该放开,并且你对一个不信任的域名,怎么可能在自己的站点里面产生这些呢;而对于第三方域名,在请求的 API 里面加上 Token 就不会有任何安全问题。

第二:将选择权交给用户,很多开发规范不是喜欢通过标签的方式改变浏览器的默认行为吗?你完全可以通过一个 meta 标签的属性来决定 携带 Cookie 还是不携带 Cookie。

结果,Google 搞出一个 SameSite=None 出来,这样的问题是很多后端的语言没有 SameSite 的封装,用起来麻烦,并且我测试使用 SameSite=None 的声明 script 仍然不携带。

最后测试 SameSite=None + link href 才能做到。可能结果就是 SameSite=None 搭配 link href 或者 form get 可以做到。A 链接都离开了,不算。

何必把这个事情搞得这么累,这么烦啊,哎,都是吃饱撑的没事干。

再次写这样的文章,也是浪费时间,因为最近又被坑到了,上次是 POST,这次是 GET,不过我找到了曲线救国的方法,就是将 GET 改成 <link> 标签,完美解决。

2022-10-05 13:45:18 1664948718 0.020533