跨域打开程序策略
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 表只在浏览器中加载