-
Notifications
You must be signed in to change notification settings - Fork 0
Description
烦人的CROB
spruce 2022/07/16 人已麻
Cross-Origin Read Blocking
有一天, 打开浏览器看到控制台报错:
Cross-Origin Read Blocking (CORB) 已屏蔽 MIME 类型为 text/html 的跨域响应 https://xx.xxxx.com/a.js 如需了解详情,请参阅 https://www.chromestatus.com/feature/5629709824032768
于是乎, 就去了解一下什么是 CORB. 具体如下
什么是 CORB
Cross-Origin Read Blocking (CORB)是一个新的 web 平台安全功能, 它能够帮助减少线程之间的旁路攻击(side-channel attacks);
CORB 的目的是防止浏览器向网页接收某些跨源网络响应,因为这些响应可能包含敏感信息,而且现有的网页功能不需要这些响应。
例如: 它将清除一个从 script 或者 img 标签发起的跨源text/html响应. 将响应的内容,用空值代替.
这是网站隔离(Site Isolation)非常重要的一部分.
为什么要有 CORB
在同源策略(same-origin policy)下通常会阻止一个网站读取其它源的任意网络资源.
但是, 在实际情况中, 实施同源策略并非只是简单阻止所有的跨域资源.
浏览器对于有些情况是允许加载跨域资源的, 例如 img , script 标签, 它们可以加载跨域的资源
并且跨源资源共享(CORS)选择性地可以读取跨域的资源;
允许加载跨域资源, 意味着存在着安全隐患.
场景: 用户登录了 victim.com 之后, 又去访问了 evil.com 的恶意站点.
在 evil.com 中有 script src="victim.com/login" 的元素, 则浏览器会向 victim.com 发起请求, 且会把敏感信息返回给浏览器. 此时, 用户在 evil.com 页面所在的内存中就留有的 victim.com 的敏感数据;
CORB 会在敏感信息加载到页面内存之前,将其拦截掉,如此,敏感信息既不会暴露于浏览器,也不会进驻内存空间,得到了很好的保护。
CORB 可以减少下面的攻击
Cross-Site Script Inclusion (XSSI)
XSSI 是一种攻击方式. 它通过 script 指向一个不是 JavaScript 代码文件的目标资源, 并且让浏览器执行.
具体的情况, 可以看看 JSON_Hijacking_Gareth_Heyes
<script charset="ISO-8859-1" src="polyglot/uploads/xss.jpg"></script>
CORB 阻止了这一类攻击, 因为 CORB 将阻止 script 标签发起的这种请求;
通过 CPU 预测执行,而引起的旁路攻击 (例如 Spectre).
例如: 攻击者会使用 img标签来加载跨域的文件, 让 JavaScript 在执行过程中, 将进程中的信息暴露给攻击者
<img src="https://example.com/secret.json" />
CORB 通过阻止 JSON 的资源加载到进程的内存中, 可以阻止这一类攻击.
CORB 不会影响的内容
navigation requests或者请求的[request destination]
(https://fetch.spec.whatwg.org/#concept-request-destination) 是"document", “embed”, “frame”, “iframe”, 或者 “object”.
Download requests
<a href="/images/myw3schoolsimage.jpg" download></a>
XHR and fetch()
ping, navigator.sendBeacon()
<link rel="prefetch" ...>
下列地址的请求
“image” 请求图片, /favicon.ico, SVG图片, CSS背景图片, etc.
“audio”, “video” or “track”
“font”
“style”
什么样的内容会被 CORB-protected
当跨域请求回来的数据 MIME type 同跨域标签应有的 MIME 类型不匹配时,浏览器会启动 CORB 保护数据不被泄漏.
例如: script 标签请求的响应是 json. img 标签请求回来的是 json.
目前, 针对下面的响应类型会触发 CORB
JSON
HTML
XML
pdf 以及More CORB-protected MIME types - adding protected types one-by-one
JSONP 与 CORB
JSONP 算是一种讨巧的跨域请求方式. 具体的情况可以看看 说说 JSON 和 JSONP,也许你会豁然开朗,含 jQuery 用例, 这里不再赘述;
JSONP 和 CORB 有什么关系呢?
在某些情况下, JSONP 会触发 CORB
例如:
响应体 Body: 是 js 代码
Content-Type: text/html
X-Content-Type-Options: ‘nosniff’
通过 script 标签, 获取到 html 的内容(因为指定了 nosniff, 浏览器会直接认为响应内容是 text/html). 从而会触发 CORB, 响应会被清空;
怎样解决
首先,看到不会影响iframe我就去用了,结果发现没办法获取,因为不同域的不能使用contentDocument