预计从今年 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 开始引入。关于跨域限制的详细信息,可以查阅其官方博客。
猜你喜欢: