使用 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 罐开始。同样,LocalStorage
、CacheStorage
、IndexedDB
等存储 API 也会在新的临时分区中加载和存储数据。该分区的范围限定为当前的顶级文档和 iframe 的来源。顶级文档卸载后,存储空间将被清除。
匿名 iframe 不受 COEP 嵌入规则的约束。这仍然安全,因为它们每次都从新的空上下文加载。系统将加载它们,但不会对这些数据进行个性化。它们只包含公开数据,这对攻击者没有价值。
演示
您可以访问以下网址查看匿名 iframe:https://anonymous-iframe.glitch.me/
注册源试用
为了确保匿名 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 是否嵌套在 <iframe anonymous>
内?
是的。具有继承性。iframe 一旦匿名化,便会应用于整个子树中的所有 iframe,即使没有 anonymous
属性也是如此。
通过 <iframe anonymous>
创建的弹出式窗口是否也采用匿名方式?
弹出式窗口会打开,就像设置了 noopener
一样。它们基于新的常规顶级上下文创建,且不是匿名的。它们无法与匿名 iframe 通信。