使用 COEP 的开发者现在可以嵌入自己不使用 COEP 的第三方 iframe。
从 Chrome 110 版开始,iframe 无凭据功能默认处于启用状态。它解决了使用跨源嵌入器政策 (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。而是从一个空的饼干罐开始。同样,LocalStorage、CacheStorage、IndexedDB 等存储 API 会在新的临时分区中加载和存储数据。该分区的范围限定为当前的顶级文档以及 iframe 的来源。一旦取消加载顶层文档,上述所有存储空间就会清空。
无凭据 iframe 不受 COEP 嵌入规则的约束。它们仍然很安全:因为它们每次都是从新的空上下文加载的,所以不应包含攻击者要追踪的个性化数据。如果某个 iframe 仅包含公开数据,那么它对攻击者没有价值。
演示
您可以查看无凭据 iframe 演示。
常见问题解答
其他浏览器是否会采用此功能?
<iframe>
是否嵌套在 <iframe credentialless>
无凭据中?
可以。具有继承性。如果 iframe 没有凭据,那么即使没有 credentialless
属性,该值也会应用于整个子树中的所有 iframe。
使用 <iframe credentialless>
创建的弹出式窗口也是无需提供凭据的吗?
弹出式窗口的打开方式与 noopener
已设置时一样。它们是在新的常规顶级上下文中创建的,不是无凭据的。它们无法与无凭据 iframe 通信。
如何检测文档是否已嵌入到无凭据 iframe 中?
在无凭据 iframe 中,window.credentialless
为 true,否则为 false。在不支持 <iframe credentialless>
的网络浏览器中,其值为 undefined
。