使用 COEP 的开发者现在可以嵌入不使用 COEP 的第三方 iframe。
为什么我们需要 COEP
某些 Web API 会增加旁路攻击的风险,如 Spectre。为降低此风险,浏览器提供了一种基于用户选择的隔离环境,称为跨源隔离,其中包括需要部署 COEP 等要求。这样,网站就可以使用特权功能,包括 SharedArrayBuffer
、performance.measureUserAgentSpecificMemory()
和分辨率更高的高精度计时器。
如需启用跨源隔离,网站必须发送以下两个 HTTP 标头:
Cross-Origin-Embedder-Policy: require-corp
Cross-Origin-Opener-Policy: same-origin
启用 COEP 时遇到的挑战
虽然跨域隔离功能提高了网页的安全性,并且能够实现强大的功能,但部署 COEP 可能很困难。其中最大的挑战之一是,所有跨源 iframe 还必须部署 COEP 和 CORP。浏览器不会加载不包含这些标头的 iframe。
iframe 通常由第三方提供,而第三方可能不容易部署 COEP。
匿名 iframe 大显身手
这正是匿名 iframe 的用武之地。通过向 <iframe>
元素添加 anonymous
属性,系统会从其他临时存储分区加载 iframe,并且不再受 COEP 限制。
示例:
<iframe anonymous src="https://example.com">
Iframe 是在新的临时上下文中创建的,并且无法访问与顶级网站关联的任何 Cookie。它从空 Cookie Jar 开始。同样,LocalStorage
、CacheStorage
、IndexedDB
等存储 API 会在新临时分区中加载和存储数据。该分区的范围限定为当前顶级文档和 iframe 的来源。卸载顶级文档后,存储空间将被清除。
匿名 iframe 不受 COEP 嵌入规则的约束。这仍然是安全的,因为它们每次都是从新的空上下文加载的。这些数据在加载时不会进行个性化。它们仅包含公开数据,这对攻击者没有价值。
演示
您可以访问 https://anonymous-iframe.glitch.me/,查看匿名 iframe
注册源代码试用
为了确保匿名 iframe 有助于开发者采用跨源隔离,我们将在 Chrome 106 到 108 版中以源代码试用形式提供这些 iframe。
注册参与源试用,使您的网站能够使用匿名 iframe:
- 为您的源请求令牌。
- 您可以通过以下任一方式使用令牌:
- 在您的 HTML 中:
html <meta http-equiv="Origin-Trial" content="TOKEN_GOES_HERE">
- 在您的 JavaScript 中:
js const meta = document.createElement('meta'); meta.httpEquiv = 'Origin-Trial'; meta.content = 'TOKEN_GOES_HERE'; document.head.append(meta);
- 在 HTTP 标头中:
text Origin-Trial: TOKEN_GOES_HERE
- 在您的 HTML 中:
- 向您的网页添加匿名 iframe:
html <iframe anonymous src="https://example.com">
如果您对此功能有任何反馈,请在 GitHub 代码库中提交问题。
第三方来源试用
来源试用版也适用于第三方脚本。这意味着,它可以通过在网页上嵌入的脚本来启用。
详细了解如何注册第三方来源试用。
常见问题解答
其他浏览器是否会采用此功能?
嵌套在 <iframe anonymous>
中的 iframe 是否为匿名?
可以。它是继承的。如果 iframe 为匿名形式,那么即使没有 anonymous
属性,该操作也会应用于整个子树中的所有 iframe。
通过 <iframe anonymous>
创建的弹出式窗口也是匿名的吗?
弹出式窗口会像设置了 noopener
一样打开。它们是从新的常规顶级上下文创建的,并且不是匿名的。它们无法与匿名 iframe 通信。