由于渲染进程需要执行 DOM 解析、CSS 解析、网络图片解码等操作,如果渲染进程中存在系统级别的漏洞,那么以上操作就有可能让恶意的站点获取到渲染进程的控制权限,进而又获取操作系统的控制权限,这对于用户来说是非常危险的。所以我们需要引入安全沙盒。
安全沙盒
概念:
浏览器中的安全沙箱是利用操作系统提供的安全技术,指让渲染进程在执行过程中无法访问或者修改操作系统中的数据, 而是通过浏览器内核来实现对数据的访问,然后将访问的结果通过 IPC 转发给渲染进程。PS: 安全沙箱最小的保护单位是进程
将渲染进程和操作系统隔离的这道墙就是我们要聊的安全沙箱
安全沙箱影响各个模块功能的方式:
1-持久存储
安全沙箱需要负责确保进程无法直接访问用户的文件系统, 所以文件的读写全在浏览器内核中实现, 并通过 IPC 将操作结果转发给渲染进程
2-网络访问
安全沙箱限制渲染进程访问网络的方式, 若要访问, 需要通过浏览器内核.
3-用户交互
让所有的键盘鼠标事件都由浏览器内核来接收, 再通过 IPC 将这些事件发送给渲染进程, 而非直接让渲染进程监控用户输入事件等操作.
渲染进程不能直接访问窗口句柄, 所以渲染进程需要渲染出位图并发送给浏览器内核, 让它将位图复制到屏幕上. 操作系统没有将用户输入事件直接传递给渲染进程, 而是将这些事件传递给浏览器内核, 然后浏览器内核再根据当前浏览器界面的状态来判断如何调度这些事件.
站点隔离:
概念:
指 Chrome 将同一站点(包含了相同根域名和相同协议的地址)中相互关联的页面放到同一个渲染进程中执行。
由于最初都是按照标签页来划分渲染进程的,所以如果一个标签页里面有多个不同源的 iframe,那么这些 iframe 也会被分配到同一个渲染进程中,这样就很容易让黑客通过 iframe 来攻击当前渲染进程。而站点隔离会将不同源的 iframe 分配到不同的渲染进程中,这样即使黑客攻击恶意 iframe 的渲染进程,也不会影响到其他渲染进程的.
参考: 极客时间-浏览器工作原理与实践