跨源资源策略(CORP)
跨域资源策略是由 Cross-Origin-Resource-Policy HTTP 头设置的策略,它允许网站和应用程序选择加入对来自其他源的某些请求的保护(例如那些使用 <script> 和 <img> 等元素发出的请求),以缓解推测性旁路攻击,例如 Spectre,以及跨站脚本包含攻击。CORP 是在默认的 同源策略之外的额外保护层。
注意:此策略仅对 no-cors 请求有效,这些请求默认由 CORS 安全列表中的方法/头发出。
由于此策略是通过响应头表达的,因此实际请求不会被阻止——相反,浏览器通过剥离响应体来阻止结果泄露。
用法
注意:由于 Chrome 中的一个错误,设置 Cross-Origin-Resource-Policy 可能会破坏 PDF 渲染,导致访问者无法阅读某些 PDF 的第一页之后的内容。在生产环境中使用此头时请谨慎。
Web 应用程序通过 Cross-Origin-Resource-Policy HTTP 响应头设置跨域资源策略,该头接受以下三个值之一:
same-site-
只有来自同一站点的请求才能读取资源。
警告:这比源的安全性低。检查两个源是否为同站点的算法在 HTML 标准中定义,并涉及检查可注册域。
same-origin-
只有来自同一源(即方案 + 主机 + 端口)的请求才能读取资源。
cross-origin-
来自任何源(同站点和跨站点)的请求都可以读取资源。这在使用 COEP 时很有用(参见下文)。
Cross-Origin-Resource-Policy: same-site | same-origin | cross-origin
在跨域资源策略检查期间,如果设置了头,浏览器将拒绝来自不同源/站点的 no-cors 请求。
与跨域嵌入者策略 (COEP) 的关系
Cross-Origin-Embedder-Policy HTTP 响应头,当用于文档时,可以用来要求子资源要么与文档同源,要么带有 Cross-Origin-Resource-Policy HTTP 响应头以表明它们可以被嵌入。这就是 cross-origin 值存在的原因。
History
这个概念最初于 2012 年提出(作为一个 From-Origin 头),但在 2018 年第二季度复活,并在 Safari 和 Chromium 中实现。
2018 年初,披露了两种称为 Meltdown 和 Spectre 的旁路硬件漏洞。这些漏洞由于推测执行功能(旨在提高性能)中出现的竞态条件而导致敏感数据泄露。
跨域资源策略是为了让网站能够直接阻止不需要的 no-cors 跨域请求而开发的。这是防御类似 Spectre 攻击的有效方法,因为浏览器在攻击者访问响应体之前将其剥离。
规范
| 规范 |
|---|
| Fetch # cross-origin-resource-policy-header |
浏览器兼容性
加载中…
另见
Cross-Origin-Resource-PolicyHTTP 头