使用 COEP 的开发者现在可以嵌入本身不使用 COEP 的第三方 iframe。
从 Chrome 110 版开始,无凭据 iframe 默认处于启用状态。它解决了使用 Cross-Origin-Embedder-Policy (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:credentialless 也可以用作 require-corp
的替代方案。如需了解详情,请参阅文档。
启用 COEP 时遇到的挑战
虽然跨源隔离可为网页带来更高的安全性,并能够启用强大的功能,但部署 COEP 可能很困难。其中最大的挑战之一是,所有跨源 iframe 都必须部署 COEP 和 CORP。浏览器不会加载不包含这些标头的 iframe。
无需凭据的 iframe 大显身手
我们将引入 <iframe credentialless>
,以帮助嵌入未设置 COEP 的第三方 iframe。通过向 <iframe>
元素添加 credentialless
属性,系统会从其他空白上下文加载 iframe。具体而言,它在加载时不使用 Cookie。这样可以移除 COEP 限制。
示例:
<iframe credentialless src="https://example.com">
此 iframe 是在新的临时情境中创建的,无法访问与顶级网站关联的任何 Cookie。而是从一个空 Cookie Jar 开始。同样,LocalStorage、CacheStorage、IndexedDB 等存储 API 会在新的临时分区中加载和存储数据。该分区的作用域同时涵盖当前的顶级文档和 iFrame 的来源。卸载顶级文档后,系统会清除所有这些存储空间。
无凭据 iframe 不受 COEP 嵌入规则的约束。它们仍然是安全的:由于它们每次都是从新的空白上下文加载,因此不应包含攻击者所追求的个性化数据。如果 iframe 仅包含公开数据,则对攻击者而言没有价值。
演示
您可以查看无凭据 iframe 的演示。
常见问题解答
其他浏览器是否会采用此功能?
<iframe>
是否嵌套在无凭据的 <iframe credentialless>
中?
可以。它是继承的。一旦某个 iframe 不使用凭据,该设置将应用于整个子树中的所有 iframe,即使没有 credentialless
属性也是如此。
通过 <iframe credentialless>
创建的弹出式窗口是否也无需凭据?
弹出式窗口会像设置了 noopener
一样打开。它们是在新的常规顶级上下文中创建的,并且需要凭据。它们无法与无凭据 iframe 通信。
如何检测文档是否已嵌入到无凭据 iframe 中?
在无凭据 iframe 中,window.credentialless
为 true,否则为 false。在不支持 <iframe credentialless>
的网络浏览器中,其值为 undefined
。