预计从今年 5 月的 Chrome 91 开始,所有平台都将需要启用跨域隔离,以访问诸如 SharedArrayBuffer 和 performance.measureUserAgentSpecificMemory() 之类的 API 。这将使桌面平台与 Android 保持一致,后者在 Chrome 88 中发布了此限制。

如果需要使用这些 API,必须为页面提供以下标头来确保页面是跨域隔离的:

Cross-Origin-Embedder-Policy: require-corp
Cross-Origin-Opener-Policy: same-origin

在执行此操作后,除非资源通过 Cross-Origin-Resource-Policy 标头或 CORS 标头(Access-Control-Allow- *等)明确允许,否则页面将无法加载跨域内容。

SharedArrayBuffer 于 2017 年 7 月的 Chrome 60 中引入,然而在次年 1 月就发现了一个严重漏洞 —— 在一些主流 CPU 中,数据高速缓存定时可能被滥用,从而导致在代码可以读取其不应该访问的内存。当时,在降低诸如 performance.now() 等计时器的频率仍无法解决问题后,Chrome 选择完全禁用 SharedArrayBuffer,直到 18 年 7 月份的 Chrome 68 中采取了跨域读取阻止等缓解措施后才重新开放 SharedArrayBuffer。

然而该方案仍有缺陷,不仅在移动设备上无法执行相同的操作,而且仅阻止了“不正确”的数据格式,无法阻止 URL 里的有效 CSS/JS/images 可能包含的私有数据。因此,现在 Chrome 提出了一个更完善的解决方案,即通过页面附带的 COOP 和 COEP 标头完成跨域隔离声明,以访问 SharedArrayBuffer 和其它具有类似功能的 API,并且可以通过 Cross-Origin-Resource-Policy 或 CORS 嵌入其它内容。

Firefox 在 2020 年 7 月 的 79 版本中率先发布了此限制,而 Chrome 88 则在 Android 中引入,桌面端将从 Chrome 91 开始引入。关于跨域限制的详细信息,可以查阅其官方博客。

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。