跨域打开程序策略
HTTP Cross-Origin-Opener-Policy (COOP) 响应头允许您确保顶级文档不会与跨域文档共享浏览上下文组。
COOP 将对您的文档进行进程隔离,如果攻击者试图在弹出窗口中打开您的文档,他们将无法访问您的全局对象,从而防止一系列被称为 XS-Leaks 的跨域攻击。
如果在新的窗口中打开带有 COOP 的跨域文档,则打开的文档将不会包含对它的引用,并且新窗口的 window.opener 属性将为 null。这使您可以比 rel=noopener 更有效地控制对窗口的引用,后者只影响传出的导航。
语法
http
Cross-Origin-Opener-Policy: unsafe-none
Cross-Origin-Opener-Policy: same-origin-allow-popups
Cross-Origin-Opener-Policy: same-origin
指令
unsafe-none-
这是默认值。允许将文档添加到其打开者的浏览上下文组中,除非打开者本身的 COOP 为
same-origin或same-origin-allow-popups。 same-origin-allow-popups-
保留对新打开的窗口或选项卡的引用,这些窗口或选项卡要么未设置 COOP,要么通过设置
unsafe-none的 COOP 来选择退出隔离。 same-origin-
将浏览上下文隔离到同源文档。跨域文档不会加载在同一个浏览上下文中。
示例
某些功能依赖于跨域隔离
某些功能,例如 SharedArrayBuffer 对象或 Performance.now() 与未限速计时器,只有在您的文档具有设置值为 same-origin 的 COOP 头部时才可用。
http
Cross-Origin-Opener-Policy: same-origin
Cross-Origin-Embedder-Policy: require-corp
另请参阅 Cross-Origin-Embedder-Policy 头部,您还需要将其设置为 require-corp 或 credentialless。
要检查跨域隔离是否成功,您可以针对 Window.crossOriginIsolated 属性或 WorkerGlobalScope.crossOriginIsolated 属性进行测试,这些属性可用于窗口和工作程序上下文
js
const myWorker = new Worker("worker.js");
if (crossOriginIsolated) {
const buffer = new SharedArrayBuffer(16);
myWorker.postMessage(buffer);
} else {
const buffer = new ArrayBuffer(16);
myWorker.postMessage(buffer);
}
规范
| 规范 |
|---|
| HTML 标准 # the-coop-headers |
浏览器兼容性
BCD 表只在浏览器中加载