Cross-Origin Read Blocking (CORB) 跨域读阻塞

跨源读取阻止 (CORB),这是一种算法,通过该算法可以识别可疑的跨源资源加载,并在它们到达网页之前被 Web 浏览器阻止。CORB 通过使敏感数据远离跨源网页来降低泄露敏感数据的风险。在大多数浏览器中,它将此类数据排除在不受信任的脚本执行上下文之外。在具有Site Isolation的浏览器中,它可以将此类数据完全排除在不受信任的渲染器进程之外,甚至有助于抵御边信道攻击。

问题

同源策略通常会阻止一个源从另一个源读取任意网络资源。在实践中,执行此策略并不像阻止所有跨源加载那么简单:必须为 Web 功能建立例外,例如

XML

与 JSON 一样,XML 是一种广泛使用的数据交换格式,并且与 HTML 一样,是一种内置于 Web 平台中的文档格式(特别是通过 XmlHttpRequest)。

通过嗅探确认 XML 内容类型比 JSON 或 HTML 更直接:XML 由 pattern 表示,可能前面有空格。

唯一标识的需要 CORB 特殊处理的 XML 案例是image/svg+xml,它是一种图像类型。所有其他 XML mime 类型都被视为受 CORB 保护。

确定响应是否受 CORB 保护

CORB 根据以下内容决定响应是否需要保护(即响应是 JSON、HTML 还是 XML 资源):

嗅探是必要的,以避免阻止依赖于错误标记的跨源响应(例如,作为图像text/html)的现有网页。如果不进行嗅探,CORB 将阻止大约 16 倍的响应。

  • CORB 将仅嗅探以确认基于标头的分类Content-Type(即,如果Content-Type标头是text/json,则 CORB 将嗅探 JSON 而不会嗅探 HTML 或 XML)。
  • 如果某些语法元素在受 CORB 保护和不受 CORB 保护的 MIME 类型之间共享,那么这些元素必须被 CORB 嗅探忽略。例如,当嗅探(受 CORB 保护的)HTML 时,CORB 会忽略并跳过 HTML 注释,因为它们也可能出现在(不受 CORB 保护的)JavaScript 中。这与在其他上下文中使用的HTML 嗅探规则不同。
  • 嗅探是一种尽力而为的启发式方法,为了获得最佳安全结果,我们建议 Web 开发人员 1) 使用正确的Content-Type标头标记响应和 2) 使用标头选择退出嗅探X-Content-Type-Options: nosniff
[[email protected] ] 本节需要强有力的理由来说明为什么 text/plain 得到这种特殊解释。理想情况下,显示 text/plain 的数据通常用于提供 HTML、JSON 或 XML。我们当前实现中对 text/plain 的处理实际上可能是早期原型的产物,它在标准 mime 嗅探之后运行,并且当响应省略 Content- 时,可能已经看到“text/plain”MIME 类型被应用为默认 MIME 类型类型标题。

请注意,以上意味着以下响应不受 CORB 保护:

  • 标记为 的响应multipart/*。这避免了必须解析嵌套部分的内容类型。我们建议不支持对敏感文档的多部分范围请求。
  • 没有标题的响应Content-Type
  • 带有 JavaScript MIME 类型的响应,例如text/javascript. 这包括 JSONP(“带填充的 JSON”),它与 JSON 不同的是要在跨源上下文中读取和执行。

附录:CORB 和网络标准

Fetch 规范中的 CORB 部分涵盖了自2018 年 5 月以来处理nosniff和 206 个响应。

CORB 确认嗅探尚未标准化。

CORB 的某些方面正在讨论中,并且可能会随着时间的推移而发展。

附录:CORB 实现状态

跟踪错误:

Status of Web Platform Tests:

参考

你可能感兴趣的:(Cross-Origin Read Blocking (CORB) 跨域读阻塞)