Cross-Origin Read Blocking (CORB) blocked cross-origin response

一、背景

最近一直在做项目联调,由于系统对接了N个第三方厂商,于是乎扯出了一堆的跨域问题,他们是下面这样的:

https域名访问http域名被浏览器禁止
在这里插入图片描述
接口未开放跨域能力在这里插入图片描述

  • 有一天 我看到了这个:

在这里插入图片描述
看不清的话看这里
Cross-Origin Read Blocking (CORB) blocked cross-origin response https://a.g.t.cn/a/b/c/d?a=260111369694412724&a=%E5%8D%93%E9%80%B8%E8%A1%A5%E5%85%85%E9%89%B4%E5%AE%9A%E6%8A%A5%E5%91%8A.jpg&nonceStr=F58BBD4D816A426FB3D326A3C90F00EA×tamp=1604021832276&a=a&w=a&a=96B1D0F79F65E785CBBD2DFD27024E40 with MIME type application/json. See https://www.chromestatus.com/feature/5629709824032768 for more details.

  • 惯性思维下,我叫对方做接口跨域因为我发现对方是https的域名故放弃让对方升级的想法,接口对方提供跨域能力后还是报错。于是乎我陷入沉思,便有了这篇家常贴。

二、描述问题

1、前因后果

我们的网页提供的外网访问方式是https的域名【现在都要求这个因为安全】,其中有一些缩略图文件是通过调用第三方接口获取的,大概是这个样子
<img draggable="false" src="https://a.b.c.com.cn?一堆参数" alt="" title="">
(直接这么放有它的原因这里就不说了不过放置URI是最好的,放置URL会将第三方的地址暴漏出来,放置URI的话可以通过后端Nginx代理避过跨域问题。废话(⊙o⊙)略过就行)。正常情况下第三方厂商们应该会返回文件流给我们,但是诡异的事情出现了对方后端接口做了跨域处理,可在界面中还是没有出现图片。错误就是上面的那个👉 Cross-Origin Read Blocking (CORB) blocked cross-origin response

2、分析

一开始是因为认为是跨域问题才让对方提供跨域能力,但是对方已经加上了还是不行,这个锅得找个人背一背啊。于是乎想了半天发现 这个是CORB啊 ,这个不是和CORS不一样吗??????
这个一个S一个B【这难道是一个SB问题😂】于是乎继续了解。

三、CORS

1、 概念

CORS[Cross-origin resource sharing] 具体的参考这个 http://www.ruanyifeng.com/blog/2016/04/cors.html 阮一峰的文章

看别人的文章吧 这不是咱讨论的重点。

四、CORB

1、概念

CORB【Cross-Origin Read Blocking】这个显然不能像CORS这么带过。
跨域读阻塞为啥读阻塞?怎么就堵塞了?我请求的是流,怎么变成json了?

2、一些概念
  • 侧信道攻击【side-channel attacks】

简单说就是利用执行时间差来攻击举个栗子:
比如密码是corb 我们猜测第一位是a 程序执行的时候比较第一位不匹配于是我们继续猜测是b不匹配继续猜测,直到我们猜测是c这时程序上发现c匹配到了第一位于是乎继续匹配下一位这样就对了一定的执行时间,于是乎我们推断出第一位密码是C。

  • 预测执行【speculation execution】

这个是CPU的一定优化,因为我们的CPU回去磁盘拿数据然后加载到内存,进行计算处理,虽然内存比磁盘要块的多,但是相对于CPU来讲都是弟弟,内存还是不够看,所以为了优化执行效率,对于一些命令比如:
if(条件){doSomething();} 这个条件CPU需要等待一段时间才拿得到,于是乎CPU先把里面的活干了,条件成立就返回不成立就回滚,这样效率就上来了。

  • 幽灵和熔断漏洞【Spectre & Meltdown】

各个进程之间的数据是不共享的所以网抑云想要读取QQ音乐的数据是读不到的,CPU发现你跨域进程读就告诉不给,不过话有说回来由于内存还是太慢了,那么对于有些数据我们会放置在高速缓存中【毕竟太快,所以很贵很珍惜空间不大】所以有些程序的数据就会被读取后放在缓存里,虽然别的程序没办法直接拿但是这个数据已经在缓存中存在了
在这里插入图片描述

图中黑色区域有一个数组array 两个元素array[0]、array[1],如果我们想访问array[6]理论上是访问不到的因为越界了,假如我们有这样的程序data[array[x]] ,如果x = 6 ,假设array[6] = 3,此时data[array[6]] = data[3],如果data[array[x]] 出现在if(条件){data[array[x]]} ,根据预测执行原理,所以array[6]已经被缓存了,然后程序遍历data数组正常每一个都很慢因为都没有缓存,直到发现data[3]速度快于其他的,所以就知道array[6]是其他程序的数据了。并且可以获取到。

  • 如果我上述说的你都没有听懂请移步下面

https://www.bilibili.com/video/av18144159/?spm_id_from=333.788.b_636f6d6d656e74.5
15分钟读懂英特尔熔断幽灵漏洞-Emory

3、说正事

CORB 是浏览器在加载可以跨域资源时,在资源载入页面之前,对其进行识别和拦截的算法。
假如我们请求<img src="https://example.com/important.json"> 如果这个json中有重要的数据那么通过上面的漏洞我们通过一些js代码如:if(条件){干坏事} 这样就可以拿到json中的秘密数据了。而CORB就是当浏览器尝试以上面代码的方式加载跨域资源时,在资源未被加载之前进行拦截,从而提升攻击者进行幽灵攻击的成本,有三种内容类型受保护,分别是 json、html 和 xml。当一个 response 被 CORB 保护时,它的 body 会被覆盖为空,同时 headers 也会被移除(当前 Chrome 仍然会保留 Access-Control-* 相关的 headers)。

https://www.chromestatus.com/feature/5629709824032768 这里面有一些链接,在公司翻不过去 自己翻吧😥。

4、分析

我这边是去调用第三方请求一个流,然鹅,对面加了header 头检验,而src的方式又没有办法带头过去,所以被拦截了,返回了一个json错误信息触发了CORB规则,被保护了,故报出了一开始的错误。

  • 15
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
### 回答1: Cross-Origin Read Blocking (CORB) 是一项安全功能,用于阻止网页从不同源(即不同域名)读取敏感数据。如果 CORB 检测到跨域请求的数据属于敏感类型,它将阻止该请求并返回错误信息。 ### 回答2: 首先,我们需要了解同源策略(Same Origin Policy)。同源策略是一种安全机制,限制了网站在脚本中如何操作来自不同来源的文档、窗口或框架。简而言之,如果两个页面拥有协议、主机和端口号完全相同,那么它们就是同源的。 而当请求跨域资源时,服务器必须在响应中设置特定的HTTP头——CORS(Cross-Origin Resource Sharing)授权。这个头告诉浏览器是否允许一个页面访问来自不同源服务器的特定资源。如果服务器没有设置这个HTTP头,浏览器默认会阻止请求。 那么,什么是CORB呢?CORB是Chrome浏览器所实现的另一种安全机制,其目的在于防止来自不同源服务器的恶意代码,以及保护隐私信息。它会拦截并阻止一部分潜在的XSS攻击,并使渲染过程更高效。 当我们在Chrome中请求跨域资源时,如果返回的内容被Chrome识别为危险的MIME类型,并且服务器没有设置CORS授权的HTTP头,就会出现“Cross-Origin Read BlockingCORBBlocked Cross-Origin Response”的错误。这个错误意味着浏览器无法读取来自另一个域的响应,因此,浏览器会阻止访问这些跨域资源。 所以,解决这个错误的方法是服务器需要设置CORS授权的HTTP头。如果服务器无法设置这个HTTP头,我们就不能直接从JS中访问这些跨域资源了,而需要采取其它的处理方式,比如通过代理等。 ### 回答3: Cross-origin read blocking (CORB)是一种浏览器安全机制,旨在防止跨站脚本攻击和信息泄漏,防止恶意网站通过注入恶意脚本来窃取用户敏感信息。在实际应用中,由于站点间跨域问题,有可能会经常遭遇到“cross-origin read blocking (corb) blocked cross-origin response”的提示。 “cross-origin read blocking (corb) blocked cross-origin response”提示意味着当前页面试图读取另一个域名下的资源,然而在跨域请求中,目标站点返回了一个被拦截的响应。这通常意味着当前页面试图从一个不受信任的域名下请求资源。浏览器会拦截这个跨域请求,防止页面从其他站点获取潜在的危险信息。 要解决“cross-origin read blocking (corb) blocked cross-origin response”问题,有几种方法: 1. 通过设置CORS(跨域资源共享)来允许站点间跨域访问。这需要在目标站点上设置一些标头,例如“Access-Control-Allow-Origin”。 2. 可以考虑使用JSONP(JSON with padding)方法,这是一种跨域请求的方法,它可以通过动态地在页面上添加一个脚本来请求数据。 3. 使用代理服务器可以将跨域请求转发到另一个域名下,以避免被拦截。 总体而言,“cross-origin read blocking (corb) blocked cross-origin response”提示意味着当前页面试图从一个不受信任的站点获取潜在的危险信息。为了保障用户安全和信息安全,浏览器会阻止这样的跨域请求。开发者可以通过设置CORS或使用JSONP等方法来解决这一问题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值