Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

烦人的CROB #14

Open
spruceatmc opened this issue Jul 16, 2022 · 0 comments
Open

烦人的CROB #14

spruceatmc opened this issue Jul 16, 2022 · 0 comments

Comments

@spruceatmc
Copy link
Owner

spruceatmc commented Jul 16, 2022

烦人的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

所以,没办法解决,只有把CROB内容换成不是CROB内容!!! :(

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant