跨源资源策略(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 时很有用(参见下文)。

http
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 年初,披露了两种称为 MeltdownSpectre 的旁路硬件漏洞。这些漏洞由于推测执行功能(旨在提高性能)中出现的竞态条件而导致敏感数据泄露。

跨域资源策略是为了让网站能够直接阻止不需要的 no-cors 跨域请求而开发的。这是防御类似 Spectre 攻击的有效方法,因为浏览器在攻击者访问响应体之前将其剥离。

规范

规范
Fetch
# cross-origin-resource-policy-header

浏览器兼容性

另见