当前位置: 首页 > news >正文

浏览器沙箱(sandBox)到底是什么?

什么是沙箱

操作系统层面的沙盒的含义就是操作系统对进程的可访问的内存地址所做的限制限制进程可访问的内存在其被分配的内存地址区间内,而不允许操作其他的内存地址,从而提供安全层面的防护。

到浏览器层面,本质原理没多大变化,实践层面可能会根据浏览器环境有所变化,比如限制脚本操作本页面之外的其他页面的DOM,限制访问非同源文档,限制向非同源服务器发送ajax等等,目的依然是安全。

以chromium为例。chromium是多进程架构,浏览器前端界面由browser进程管理,各个web page的tab属于renderer进程管理。chromium的sandbox是将renderer进程作为防护对象browser进程会给每个renderer进程分配资源,但这些renderer进程只能访问被分配的资源,不能访问未被分配的资源。这里资源的概念比较广泛,具体到可访问的DOM(对应内存中的对象),或抽象到origin scope等。实现层面的话,可以类比Linux下文件系统的权限位,浏览器会对每个web page实现对应的权限位,w3c HTML规范里 [Sandbox](https://www.w3.org/WebPlatform/docs/html51/browsers.html#sandboxing) 有相关内容。

沙箱模型技术是浏览器和其他应用程序中保护安全的一种组件关系设计模式,最初发明人为GreenBorder公司。2007年5月,谷歌公司收购了该公司,也将此项专利应用于chrome浏览器的研发中。chrome对沙箱模型的解释是:

The sandbox is used to restrict sub-processes (renderer, plugin, GPU, etc) from directly accessing system resources. This helps to protect the user from untrusted and potentially malicious Web content.

翻译为中文是:

沙盒用于限制子进程(渲染器、插件、GPU等)直接访问系统资源。这有助于保护用户免受不受信任和潜在恶意Web内容的攻击。

背景

  一般而言,对于网络上的网页中的JavaScript代码和插件都是不受信的(除非是经过认证的网站),特别是一些故意设计侵入浏览器运行的主机代码更是非常危险,通过一些手段或者浏览器中的漏洞,这些代码可能获取了主机的管理权限,这对主机系统来说是非常危险的,所以保证网页本身之外,还需要保证浏览器和浏览器所在的系统不存在危险。

  对于网络上的网页,浏览器认为他们是不安全的,因为网页总是存在各种可能性,也许是无意的或有意的攻击。如果有一种机制,将网页的运行限制在一个特定的环境中,也就是一个沙箱中,使它只能访问有限的功能。那么,即使网页工作的渲染引擎被攻击,它也不能够获取渲染引擎工作的主机系统中的任何权限,这一思想就是沙箱模型。

原理

“沙盒”技术与主动防御技术原理截然不同。主动防御是发现程序有可疑行为时立即拦截并终止运行“沙盒”技术则是发现可疑行为后让程序继续运行,当发现的确是病毒时才会终止。“沙盒”技术的实践运用流程是:让疑似病毒文件的可疑行为在虚拟的“沙盒”里充分表演,“沙盒”会记下它的每一个动作;当疑似病毒充分暴露了其病毒属性后,“沙盒”就会执行“回滚”机制:将病毒的痕迹和动作抹去,恢复系统到正常状态。
如果您还不懂,那说的再简单一些。想象一下,在一个装满了平整细沙的盒子里,我们可以尽情随意地在上面作画、涂写,无论画的好坏,最后轻轻一抹,沙盒又回到了原来的平整状态。沙盒的魅力就在于他允许你出错,还可以给你改正的机会

实现  

  在Windows系统中,浏览器结合了DEP、ASLR、SafeSEH等操作系统提供的保护技术,用于对抗内存攻击。与此同时,浏览器开发商还发展出多进程架构,使得安全性又有了很大的提高。(注:由于沙箱模型严重依赖操作系统提供的技术,而不同的操作系统提供的安全技术是不一样的,这就意味着不同操作系统上的实现是不一致的。)

  Google Chrome是第一个采取多进程架构的浏览器。Chrome的主要进程氛围:浏览器进程,渲染进程,插件进程、拓展进程插件进程如flash、pdf等于浏览器进程严格隔离,因此不会互相影响。

  Chrome的渲染引擎由SandBox隔离,网页代码要与浏览器内核进程通信、与操作系统通信都需要通过IPC channel,在其中会进行一些安全检查

  采用SandBox技术,可以让网页的渲染在一个独立的Renderer进程中进行,并且该进程是受限的,如下图:

  受限环境只能被某些或者很少的系统调用而且不能直接访问用户数据。

  以下是Chrome实现的一个相对完整的SandBox:

  沙箱模型工作的基本单位就是进程。每一个进程对应一个沙箱。相对于单进程浏览器,在发生崩溃时,多进程浏览器只会崩溃当前的Tab页,而单进程浏览器则会崩溃整个浏览器进程。这对于用户体验式很大的提升。

相关文章:

  • 渲染
  • URI和URL的区别比较与理解
  • CEF调试Render进程
  • Chrome V8引擎介绍
  • c++中的 extern “C“
  • 中断向量表
  • WM_NCCREATE与WM_CREATE的区别
  • GetWindowLongPtr
  • WNDCLASSEX
  • C++强制类型转换运算符(static_cast、reinterpret_cast、const_cast和dynamic_cast)
  • C++ 虚函数表 vfptr
  • WM_NCHITTEST
  • CreateProcess函数详解
  • CEF类笔记-cef_app
  • cef_client.h
  • 2017年终总结、随想
  • Android路由框架AnnoRouter:使用Java接口来定义路由跳转
  • canvas 五子棋游戏
  • CentOS从零开始部署Nodejs项目
  • ES6语法详解(一)
  • GDB 调试 Mysql 实战(三)优先队列排序算法中的行记录长度统计是怎么来的(上)...
  • go语言学习初探(一)
  • httpie使用详解
  • IIS 10 PHP CGI 设置 PHP_INI_SCAN_DIR
  • Java,console输出实时的转向GUI textbox
  • JavaScript类型识别
  • JavaScript中的对象个人分享
  • java架构面试锦集:开源框架+并发+数据结构+大企必备面试题
  • Linux快速复制或删除大量小文件
  • MySQL主从复制读写分离及奇怪的问题
  • nfs客户端进程变D,延伸linux的lock
  • passportjs 源码分析
  • vue-loader 源码解析系列之 selector
  • 关于 Cirru Editor 存储格式
  • 观察者模式实现非直接耦合
  • 记录一下第一次使用npm
  • 简单实现一个textarea自适应高度
  • 跨域
  • 前嗅ForeSpider中数据浏览界面介绍
  • 提升用户体验的利器——使用Vue-Occupy实现占位效果
  • 我的面试准备过程--容器(更新中)
  • 线上 python http server profile 实践
  • 小程序 setData 学问多
  • 走向全栈之MongoDB的使用
  • SAP CRM里Lead通过工作流自动创建Opportunity的原理讲解 ...
  • 不要一棍子打翻所有黑盒模型,其实可以让它们发挥作用 ...
  • 小白应该如何快速入门阿里云服务器,新手使用ECS的方法 ...
  • ​LeetCode解法汇总2696. 删除子串后的字符串最小长度
  • ​软考-高级-信息系统项目管理师教程 第四版【第19章-配置与变更管理-思维导图】​
  • #define 用法
  • (html转换)StringEscapeUtils类的转义与反转义方法
  • (Note)C++中的继承方式
  • (阿里云万网)-域名注册购买实名流程
  • (分布式缓存)Redis哨兵
  • (附源码)流浪动物保护平台的设计与实现 毕业设计 161154