浏览器架构与浏览器安全
浏览器的安全和浏览器架构有密不可分的关系。最初的单进程架构浏览器,一个进程渲染页面、运行JS发起网络请求、绘制UI、显示等任务都要负责。
仔细想来,一个进程既要接收解析来自互联网中繁杂的资源,又有操作系统层级的权限,是一件很危险的情况了。单进程架构不仅在性能上不足,在安全问题上也有大的漏洞,而这个漏洞已延伸到操作系统层级了。后续的架构都是多进程架构。
多进程架构与安全沙箱
多进程架构
现代的浏览器架构都是多进程架构。划分出了浏览器主进程、网络进程、渲染进程等多个进程。浏览器也分为两部分:浏览器内核、渲染进程。
渲染进程只负责Html解析、CSS解析、图片解码、渲染位图等任务,而其他操作系统层面任务最终都会由浏览器内核处理。
没错,浏览器内核就包含了以上所说的其他进程,可负责浏览器窗口管理、发起网络请求、本地持久化存储、显示等任务。这些进程各司其职,只做分内的事,需要共享的数据、需要开启的任务都会通过IPC通信(进程间通信)与其他进程对接。
安全沙箱
多进程架构中渲染进程没有操作系统级权限,已经和操作系统隔离开了。隔离渲染进程和操作系统的就是安全沙箱。
安全沙箱是利用操作系统提供的安全技术,这样渲染进程在运行中就无法获取或修改操作系统中的数据。安全沙箱最小隔离单位是进程,所以无法保护单进程浏览器。
安全沙箱所影响到的模块功能
持久存储
cookie的存取、文件的读写都是由浏览器内核完成。浏览器内核会通过IPC通信将结果返回给渲染进程。
网络访问
网络访问也是由浏览器内核完成的。
用户交互
操作系统可提供一个叫窗口句柄的东西,应用程序可在其上进行绘制、接收键盘鼠标消息。由于安全沙箱的存在,渲染进程不可操作窗口句柄,需通过IPC和浏览器内核通信间接完成交互。
页面的渲染
渲染进程生成的位图,不可直接显示到显示屏上。需要先共享给浏览器内核,由浏览器内核将图片展示到屏幕上。
用户输入事件
用户的输入事件会先传给浏览器内核,浏览器内核再根据当前情景进行具体的任务调度。这一机制极大的限制了渲染进程对用户输入的监听能力。
站点隔离
站点隔离是指Chrome将同一站点(地址所含根域名、协议版本相同的站点)所关联的页面放入同一个渲染进程处理。
实现站点隔离,可使恶意的iframe被隔离在自己的进程中,无法访问其他iframe的内容,防止入侵其他站点。