14

跨域,不止CORS

 3 years ago
source link: https://mp.weixin.qq.com/s?__biz=Mzg2NDAzMjE5NQ%3D%3D&%3Bmid=2247487175&%3Bidx=1&%3Bsn=a357a93ce8194ca9d84b52757b030f78
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

UniUfuA.png!mobile

我们通常提到跨域问题的时候,相信大家首先会想到的是 CORS (跨源资源共享),其实  CORS 只是众多跨域访问场景中安全策略的一种,类似的策略还有:

  • COEP: Cross Origin Embedder Policy :跨源嵌入程序策略
  • COOP: Cross Origin Opener Policy :跨源开放者政策
  • CORP: Cross Origin Resource Policy :跨源资源策略
  • CORB: Cross Origin Read Blocking :跨源读取阻止

COEP、COOP 这两个新策略我已经在前面的文章中介绍过了,感兴趣的可以看 新的跨域策略:使用COOP、COEP为浏览器创建更安全的环境

今天,我来给大家介绍一下 CORB: Cross Origin Read Blocking (跨源读取阻止)

站点隔离

RBraiae.png!mobile

互联网是一个非常复杂多样的环境,我们可以在上面做各种事情,有的时候我们在上面存钱、有的时候在上面看视频,但是你肯定不希望看视频的网站知道你存了多少钱,所以在浏览器中不同来源的站点不能互相访问,我们熟悉的另一个名称是:同源策略。

但是很多恶意网站会通过各种巧妙的手段绕过这个限制,站点隔离是 Chrome 中的一项安全功能,它提供了额外的防护措施,可以降低此类攻击成功的可能性。

它可以确保始终将来自不同网站的页面置于不同的流程中,每个流程都在沙箱中运行,以限制流程的执行范围。它还阻止了从其他站点接收某些类型的敏感数据的过程。

跨域读取阻止

即使所有不同源的页面都处于自己单独的进程中,页面仍然可以合法的请求一些跨站的资源,例如图片和 JavaScript 脚本,有些恶意网页可能通过  <img> 元素来加载包含敏感数据的  JSON 文件:

<img src="https://your-bank.example/balance.json">
<!-- Note: the attacker refused to add an `alt` attribute, for extra evil points. -->
uYjUjum.png!mobile

如果没有 站点隔离 ,则  JSON 文件的内容会保存到渲染器进程的内存中,此时,渲染器会注意到它不是有效的图像格式,并且不会渲染图像。但是,攻击者随后可以利用  Spectre 之类的漏洞来潜在地读取该内存块。

Spectre 漏洞我也在这片文章介绍过了  新的跨域策略:使用COOP、COEP为浏览器创建更安全的环境

攻击者可以使用 <img> 而不是使用  <script> 来将敏感数据提交到内存:

<script src="https://your-bank.example/balance.json"></script>

跨域读取阻止( CORB )是一项安全功能,它可以根据其  MIME 类型防止  balance 内容进入渲染器进程内存中。

我们看一下 CORB 的工作方式。网站可以从服务器请求两种类型的资源:

  • 数据资源,例如  HTML,XML 或  JSON 文档
  • 媒体资源,例如图像, JavaScript,CSS 或字体

使用 CORS 头,如  Access-Control-Allow-Origin: * ,网站能够从自己的来源或其他来源接收数据资源。另一方面,媒体资源可以来自任何来源,即使没有允许的  CORS 头。'

如果发生以下情况, CORB 会阻止渲染器进程接收跨域数据资源(即  HTML,XML或JSON ):

  • 资源具有  X-Content-Type-Options: nosniff Header
  • CORS 并未明确允许访问资源

如果跨域数据资源未设置 X-Content-Type-Options: nosniff Header ,则  CORB 尝试嗅探响应主体以确定它是  HTML,XML 还是  JSON 。这是必需要做的的,因为某些  Web 服务器配置不正确,例如将图像配置为  text/html

使用 CORB 策略

为了使我们的网站更加安全,建议所有网站都开启 CORB ,只需要下面的操作:

  • Content-Type
    HTML
    text/html
    
  • 开启  X-Content-Type-Options: nosniff 来防止站点进行自动  MIME 嗅探

读者讨论又因为不可抗力被暂停了,文章交流可以先加我好友或在公众号后台留言,如果文章帮到了你,欢迎【在看、点赞】支持

YZzamaU.jpg!mobile


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK