Chrome:将禁用修改document.domain以放宽同源策略

系统 浏览器
Chrome未来将禁用修改document.domain,如果你的网站依赖于设置document.domain 来解决跨域的问题,那么你可能需要注意了。

你好,我是tiantian。

几天前,Chrome developer 博客发布了这么一篇文章:

大致意思是,Chrome未来将禁用修改document.domain,如果你的网站依赖于设置document.domain 来解决跨域的问题,那么你可能需要注意了。

而且Chrome计划从 Chrome 101 开始使 document.domain 不可变,也就是说如果你是依赖于这种方式放宽同源策略的话,你的站点可能受到影响。

domain

根据MDN的定义如下:

Document接口domain属性获取/设置当前文档的原始域部分,常常用于同源策略。

要了解有关设置document.domain 的安全含义的更多信息,请阅读 MDN :

https://developer.mozilla.org/zh-CN/docs/Web/API/Document/domain#setter

同源策略:保证一个网页不能访问(修改或提取数据)另一个页面,除非这些页面托管在同一源上。为了解决很多跨域间的通信问题,许多的网站会通过设置document.domain来达到目的。

例如,user1.example.com 和 user2.example.com之间是不能相互访问的,为了实现这种跨域访问,通过将 document.domain 设置为其公共域后缀,它们可以相互授予访问权限。

使用率

跨域的方案有很多种,使用这种方式来放宽同源策略的,有多少站点呢?

在 2020-12-01 HTTP Archive 语料库中,我们看到 7038 个页面(在 7,849,064 中:0.09%)的行为受到 document.domain 的影响。

比如阿里巴巴在 *.alibaba.com 域(即 https://baominhjsc.trustpass.alibaba.com/)上运行店面,这些域依赖 document.domain 与来自 onetalk.alibaba.com 的域进行通信。

再比如qq.com 有大约 110 个子域,它们依赖于 document.domain 与 apps.game.qq.com 等框架通信登录状态。

所以对于我们开发人员来说,未来真的禁用了document.domain,我们应该怎么做呢?

新的提案

Origin-Agent-Cluster http 标头(规范) 允许页面请求被源(而不是站点)隔离。如果设置为 true ( Origin-Agent-Cluster: ?1 ),则要求浏览器按来源隔离页面。如果为假,则按站点。(Agent Cluster 是隔离组的规范。由于低级隔离在 API 层不可见,规范只是粗略地触及主题。)

详细的解读:

  • Origin-Agent-Cluster: 标头在存在时将继续像当前一样工作。当标头不存在时,将更改的是默认值。
  • 当页面分配给 document.domain 但未设置 Origin-Agent-Cluster: ?0 标头时,我们将实施控制台警告。

所以未来有这么一种可能:通过 document.domain 放宽同源策略的唯一方法是发送一个 Origin-Agent-Cluster: ?0 标头。

可能还有一个比较疑惑的问题,谁需要设置 Origin-Agent-Cluster 标头?

个人觉得,任何一个希望设置 document.domain 来达到跨域通信的页面,都需要通过发送 Origin-Agent-Cluster: ?0 来选择加入该功能。

浏览器兼容性

对于这项工作的开放,The Origin specification 规范声明该功能应该被删除

主要意思是强调避免使用 document.domain,它会破坏了同源策略提供的安全保护。出于这些安全隐患,此功能正在从 Web 平台中删除。(这是一个漫长的过程,需要很多年。)

WebKit 表示他们对弃用 document.domain 持适度的积极态度。需要围观他们的讨论,可以阅读以下:

https://github.com/w3ctag/design-reviews/issues/564#issuecomment-768450217

小结

未来是否会禁用document.domain这种方式来放宽同源策略,这个过程应该很漫长。对于开发人员来说,我们可以通过设置 Origin-Agent-Cluster http 标头来过渡。至于最后的方案如何,我们值得期待。

参考

https://developer.mozilla.org/zh-CN/docs/Web/API/Document/domain#setter

https://developer.mozilla.org/en-US/docs/Web/Security/Same-origin_policy

https://developer.chrome.com/blog/immutable-document-domain/

https://developer.mozilla.org/zh-CN/docs/Web/API/Window/postMessage

https://github.com/mikewest/deprecating-document-domain/

https://github.com/mikewest/deprecating-document-domain/

https://github.com/mikewest/deprecating-document-domain/blob/main/2020-12-document-domain-usage.csv

https://html.spec.whatwg.org/multipage/origin.html

https://github.com/w3ctag/design-reviews/issues/564#issuecomment-768450217

 

责任编辑:姜华 来源: 天天Up
相关推荐

2013-09-27 15:25:52

FirefoxChromeIE

2018-09-29 15:15:40

ChromeGoogle浏览器

2020-06-22 13:39:00

Chrome谷歌浏览器

2013-11-18 13:50:39

GoogleChromePDF

2013-11-08 09:15:39

ChromeWindows

2015-12-16 11:24:16

2009-02-24 17:19:38

2021-03-10 13:07:12

Chrome浏览器漏洞

2023-02-22 09:07:32

微软AI

2021-05-11 09:07:18

Chrome浏览器HTML标签

2011-07-21 11:12:56

Windows组策略U盘

2021-04-06 06:10:24

谷歌Chrome 浏览器

2021-07-27 09:16:24

谷歌Chrome 浏览器

2021-07-05 12:44:31

ChromeHTTPS-Only模Google

2023-01-10 14:49:21

Chrome浏览器

2021-01-21 05:51:52

Chrome FlashWindows

2021-05-10 06:58:41

ChromeFlash版本号

2023-12-12 09:45:16

前端浏览器

2011-07-21 17:31:51

本地组策略Windows Vis

2011-06-23 10:24:27

Chrome 14
点赞
收藏

51CTO技术栈公众号