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

Arthur Sonzogni
Arthur Sonzogni

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

为什么需要 COEP

某些 Web API 会增加遭受 Spectre 等旁道攻击的风险。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?

可以。它是继承的。一旦某个 iframe 变为匿名,该属性就会应用于整个子树中的所有 iframe,即使没有 anonymous 属性也是如此。

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

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

资源