如何使我的网站与即将到来的 Cross-Origin-Isolation 更改兼容,以支持 SharedArrayBuffer?

8

我看到Chrome即将进行更改,以启用SharedArrayBuffer的使用,具体来说是“使您的网站‘跨源隔离’”。但我的网站使用了不满足此要求的外部API。因此,我将使用SharedArrayBuffer的代码转移到了iframe中使用子域,并在该页面上添加了所需的标头。现在我进一步阅读了一些资料,似乎我仍然需要在顶级文档中提供所需的标头,否则仍会在控制台中收到警告。

仅想澄清的是,我的网站现在使用以下结构:

  • app.website.com -> 包含完整的应用程序功能
  • service.website.com -> 包含使用SharedArrayBuffer的功能

我认为只需将所需的标头添加到service.website.com即可正常工作,但我仍然收到跨源警告。有什么想法吗?


请看这里:https://dev59.com/8FEG5IYBdhLWcg3wZ8ui - JB_DELR
1个回答

2

SharedArrayBuffer只能在整个框架链都处于跨源隔离环境下的情况下启用。即使您嵌入使用SharedArrayBuffer的页面,父页面也必须处于跨源隔离状态。

一种可能的解决方法是打开一个跨源隔离的弹出窗口,如果用户体验可行的话。但需要注意的是,跨源隔离的页面将无法与其他窗口通信。

我知道这很麻烦,但出于安全原因,需要进行跨源隔离。


这仅适用于Chrome,无法在Firefox中使用,但您可以注册原始试用版,以使您的起源暂时免除此限制。 Chrome团队正在努力放宽条件,以实现跨源隔离,但目前,您可以申请保持SAB工作。 了解更多信息:https://developer.chrome.com/blog/enabling-shared-array-buffer/ - agektmr
你好 agektmr,你在 web.dev/coop-coep/ 上发布的非常重要的博客文章关于这个主题并不是很清晰。它有关于如何隔离一个 iframe 的指示,其中一种方法是像这样打开 iframe:<iframe allow="cross-origin-isolated">,另一种方法是设置一个 CORP 头部(在 COOP 和 COEP 之上,我想),但它没有提到是否可能在非隔离的父级内嵌入一个隔离的 iframe。我认为在阅读后这是可能的,但未能使其工作。 - ZYinMD
Chrome拥有一种专有的架构,称为“站点隔离”,它隔离iframe。因此,您是正确的,可以期望它们在Chrome(以及很快的Firefox)上被隔离。但是,COOP / COEP是一项旨在标准化所有浏览器上的跨源隔离的努力,在这些浏览器中不能保证它们分离iframe。该标准假定iframe没有被隔离。 - agektmr
@agektmr 谢谢您的解释!这是否意味着标准只要求 COOP 隔离窗口而不是 iframe?为什么标准不平等地对待窗口和 iframe? - qpalz
是的,为了保护您自己的来源,COOP已经足够了。而为了防止您的文档被嵌入到跨源iframe中,可以使用X-Frame-Options: DENY或CSP frame-ancestors指令。您必须注意,COEP本身并不是一种保护措施。它更像是一个承诺,即该页面不会加载任何明确选择跨源资源的危险功能(例如可能被Spectre利用的SAB)。因此,在跨源隔离页面中加载的资源要么是安全的,要么理解风险。 - agektmr
显示剩余4条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接