匿名 iframe 源试用:在 COEP 环境中轻松嵌入 iframe

Arthur Sonzogni
Arthur Sonzogni

使用 COEP 的开发者现在可以嵌入不使用 COEP 的第三方 iframe。

为什么我们需要 COEP

某些 Web API 会增加旁路攻击的风险,如 Spectre。为降低此风险,浏览器提供了一种基于用户选择的隔离环境,称为跨源隔离,其中包括需要部署 COEP 等要求。这样,网站就可以使用特权功能,包括 SharedArrayBufferperformance.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 开始。同样,LocalStorageCacheStorageIndexedDB 等存储 API 会在新临时分区中加载和存储数据。该分区的范围限定为当前顶级文档和 iframe 的来源。卸载顶级文档后,存储空间将被清除。

匿名 iframe 不受 COEP 嵌入规则的约束。这仍然是安全的,因为它们每次都是从新的空上下文加载的。这些数据在加载时不会进行个性化。它们仅包含公开数据,这对攻击者没有价值。

演示

您可以访问 https://anonymous-iframe.glitch.me/,查看匿名 iframe

注册源代码试用

为了确保匿名 iframe 有助于开发者采用跨源隔离,我们将在 Chrome 106 到 108 版中以源代码试用形式提供这些 iframe。

注册参与源试用,使您的网站能够使用匿名 iframe:

  1. 为您的源请求令牌
  2. 您可以通过以下任一方式使用令牌:
    • 在您的 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
  3. 向您的网页添加匿名 iframe: html <iframe anonymous src="https://example.com">

如果您对此功能有任何反馈,请在 GitHub 代码库中提交问题。

第三方来源试用

来源试用版也适用于第三方脚本。这意味着,它可以通过在网页上嵌入的脚本来启用。

详细了解如何注册第三方来源试用

常见问题解答

其他浏览器是否会采用此功能?

嵌套在 <iframe anonymous> 中的 iframe 是否为匿名?

可以。它是继承的。如果 iframe 为匿名形式,那么即使没有 anonymous 属性,该操作也会应用于整个子树中的所有 iframe。

通过 <iframe anonymous> 创建的弹出式窗口也是匿名的吗?

弹出式窗口会像设置了 noopener 一样打开。它们是从新的常规顶级上下文创建的,并且不是匿名的。它们无法与匿名 iframe 通信。

资源