跨域资源共享策略 (CORP)

跨域资源策略 是由 Cross-Origin-Resource-Policy HTTP 标头 设置的策略,它允许网站和应用程序选择加入针对来自其他来源的某些请求的保护(例如,使用 <script><img> 等元素发出的请求),以减轻投机性侧信道攻击,例如 幽灵,以及跨站点脚本包含攻击。

CORP 是除了默认的 同源策略 之外的另一层保护。跨域资源策略补充了 跨域读取阻止 (CORB),它是一种默认阻止某些跨域读取的机制。

注意: 策略仅对 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 值存在的原因。

历史

该概念最初是在 2012 年提出的(作为 From-Origin),但在 2018 年第二季度 重新出现 并已在 Safari 和 Chromium 中实现。

在 2018 年初,发现了两种名为熔断幽灵的侧信道硬件漏洞。这些漏洞允许由于竞态条件而泄露敏感数据,而竞态条件是作为旨在提高性能的投机执行功能的一部分而产生的。

作为回应,Chromium 发行了 跨域读取阻止,它会自动保护某些资源(Content-Type 为 HTML、JSON 和 XML)免遭跨域读取。如果应用程序未提供 no-sniff 指令,Chromium 将尝试猜测 Content-Type 并仍然应用保护。

Cross-Origin-Resource-Policy 是一个可选的响应标头,它可以保护任何资源;浏览器不需要嗅探 MIME 类型。

规范

规范
获取标准
# cross-origin-resource-policy-header

浏览器兼容性

BCD 表仅在启用 JavaScript 的浏览器中加载

另请参阅