首页 > 其他分享 >浏览器中的安全沙箱

浏览器中的安全沙箱

时间:2024-01-07 21:32:51浏览次数:23  
标签:浏览器 渲染 安全 Cookie 内核 沙箱 进程

浏览器被划分为浏览器内核和渲染内核两个核心模块,其中浏览器内核是由网络进程、浏览器主进程和 GPU 进程组成的,渲染内核就是渲染进程。

所有的网络资源都是通过浏览器内核来下载的,下载后的资源会通过 IPC 将其提交给渲染进程(浏览器内核和渲染进程之间都是通过 IPC 来通信的)。然后渲染进程会对这些资源进行解析、绘制等操作,最终生成一幅图片。但是渲染进程并不负责将图片显示到界面上,而是将最终生成的图片提交给浏览器内核模块,由浏览器内核模块负责显示这张图片。

由于渲染进程需要执行 DOM 解析、CSS 解析、网络图片解码等操作,如果渲染进程中存在系统级别的漏洞,那么以上操作就有可能让恶意的站点获取到渲染进程的控制权限,进而又获取操作系统的控制权限,这对于用户来说是非常危险的。

因为网络资源的内容存在着各种可能性,所以浏览器会默认所有的网络资源都是不可信的,都是不安全的。但谁也不能保证浏览器不存在漏洞,只要出现漏洞,黑客就可以通过网络内容对用户发起入侵。

我们需要在渲染进程和操作系统之间建一道墙,即便渲染进程由于存在漏洞被黑客入侵,但由于这道墙,黑客就获取不到渲染进程之外的任何操作权限。将渲染进程和操作系统隔离的这道墙就是安全沙箱。

浏览器中的安全沙箱是利用操作系统提供的安全技术,让渲染进程在执行过程中无法访问或者修改操作系统中的数据,在渲染进程需要访问系统资源的时候,需要通过浏览器内核来实现,然后将访问的结果通过 IPC 转发给渲染进程。

安全沙箱最小的保护单位是进程。因为单进程浏览器需要频繁访问或者修改操作系统的数据,所以单进程浏览器是无法被安全沙箱保护的,而现代浏览器采用的多进程架构使得安全沙箱可以发挥作用。

分析渲染进程和浏览器内核各自都有哪些职责,如下图:

浏览器中的安全沙箱_安全沙箱

我们可以看到由于渲染进程需要安全沙箱的保护,因此需要把在渲染进程内部涉及到和系统交互的功能都转移到浏览器内核中去实现。那安全沙箱是如何影响到各个模块功能的呢?

1、持久存储

由于安全沙箱需要负责确保渲染进程无法直接访问用户的文件系统,但是在渲染进程内部有访问 Cookie 的需求、有上传文件的需求,为了解决这些文件的访问需求,所以现代浏览器将读写文件的操作全部放在了浏览器内核中实现,然后通过 IPC 将操作结果转发给渲染进程。

具体地讲,如下文件内容的读写都是在浏览器内核中完成的:

  • 存储 Cookie 数据的读写。通常浏览器内核会维护一个存放所有 Cookie 的 Cookie 数据库,然后当渲染进程通过 JavaScript 来读取 Cookie 时,渲染进程会通过 IPC 将读取 Cookie 的信息发送给浏览器内核,浏览器内核读取 Cookie 之后再将内容返回给渲染进程。
  • 一些缓存文件的读写也是由浏览器内核实现的,比如网络文件缓存的读取。

2、网络访问

同样有了安全沙箱的保护,在渲染进程内部也是不能直接访问网络的,如果要访问网络,则需要通过浏览器内核。不过浏览器内核在处理 URL 请求之前,会检查渲染进程是否有权限请求该 URL,比如检查 XMLHttpRequest 或者 Fetch 是否是跨站点请求,或者检测 HTTPS 的站点中是否包含了 HTTP 的请求。

3、用户交互

通常情况下,如果你要实现一个 UI 程序,操作系统会提供一个界面给你,该界面允许应用程序与用户交互,允许应用程序在该界面上进行绘制,比如 Windows 提供的是 HWND,Linux 提供的 X Window,我们就把 HWND 和 X Window 统称为窗口句柄。应用程序可以在窗口句柄上进行绘制和接收键盘鼠标消息。

由于渲染进程不能直接访问窗口句柄,所以渲染进程需要完成以下两点大的改变。

第一点,渲染进程需要渲染出位图。为了向用户显示渲染进程渲染出来的位图,渲染进程需要将生成好的位图发送到浏览器内核,然后浏览器内核将位图复制到屏幕上。

第二点,操作系统没有将用户输入事件直接传递给渲染进程,而是将这些事件传递给浏览器内核。然后浏览器内核再根据当前浏览器界面的状态来判断如何调度这些事件,如果当前焦点位于浏览器地址栏中,则输入事件会在浏览器内核内部处理;如果当前焦点在页面的区域内,则浏览器内核会将输入事件转发给渲染进程。

之所以这样设计,就是为了限制渲染进程有监控到用户输入事件的能力,所以所有的键盘鼠标事件都是由浏览器内核来接收的,然后浏览器内核再通过 IPC 将这些事件发送给渲染进程。

由于渲染进程引入了安全沙箱,所以浏览器的持久存储、网络访问和用户交互等功能都不能在渲染进程内直接使用了,因此我们需要把这些功能迁移到浏览器内核中去实现,这让原本比较简单的流程变得复杂了。


标签:浏览器,渲染,安全,Cookie,内核,沙箱,进程
From: https://blog.51cto.com/key3feng/9134940

相关文章

  • Linux安全策略—SELinux
    一、概述SELinux,全称为SecurityEnhancedLinux,是一种为Linux内核提供访问控制安全策略的机制。它通过强制访问控制,增强了操作系统的安全性,防止恶意软件和攻击者对系统资源的非法访问。二、SELinux的原理SELinux基于域-类型强制访问控制模型,将系统资源划分为不同的安全上下文,并定义......
  • Chrome等浏览器下出现net ERR_BLOCKED_BY_CLIENT的解决办法
    当我们在做开发时,调试页面图片会出现部分图片无法正常显示,并且确认图片的地址正确;按F12Debug查看报错原因,提示net::ERR_BLOCKED_BY_CLIENT错误,但当我们点击图片地址发现,图片地址并无错误;遇到这类情况,一般都是浏览器安装的某个第三方扩展程序已阻止对此网页的访问,例如解决办法:当我......
  • 基于SSM的生活缴费系统及相关安全技术的设计与实现
    互联网发展至今,无论是其理论还是技术都已经成熟,而且它广泛参与在社会中的方方面面。它让信息都可以通过网络传播,搭配信息管理工具可以很好地为人们提供服务。针对生活缴费信息管理混乱,出错率高,信息安全性差,劳动强度大,费时费力等问题,采用生活缴费系统可以有效管理,使信息管理能够更加......
  • 浏览器中的同源策略
    如果两个URL的协议、域名和端口都相同,我们就称这两个URL同源。比如下面这两个URL,它们具有相同的协议HTTPS、相同的域名www.baidu.com,以及相同的端口443,所以我们就说这两个URL是同源的。https://www.baidu.com/?category=1https://www.baidu.com/?category=0浏览器默认两......
  • [FortiGate] FG-VM安全防火墙初始化配置实例
    FortiGateFirewall是什么?FortiGate防火墙是一种网络安全设备,主要用于保护企业网络免受各种网络威胁和入侵。它具有以下主要功能:防火墙功能:FortiGate防火墙可以检测和阻止未经授权的网络流量,通过设置访问规则来控制网络流量的进出。它可以防止恶意入侵、拒绝服务和其他网络威胁。......
  • 一个有趣的浏览器插件“猫抓”
    一个有趣的浏览器插件“猫抓”猫抓是一款非常好用的浏览器插件,它能抓取几乎所有chrome内核浏览器的网页视频链接数据。猫抓插件可以在任意网页抓取任意视频数据并且一键抓取保存获取您需要内容,操作起来简单方便,下载内容可以保存本地电脑。猫抓功能介绍  猫抓Chrome插件是一款......
  • 榴弹炮的点火代码,要求迅速、安全
    榴弹炮的点火代码通常由计算机控制,以确保迅速、安全地发射。以下是一个简单的示例,展示了如何使用Python编写榴弹炮的点火代码:importtimeclass榴弹炮:def__init__(self):self.已点燃=Falsedef点火(self):ifnotself.已点燃:print(......
  • k8s 安全
    认证k8s的请求有两种模式:非安全模式(insecure-port)该模式下所有请求都不会经过认证,不建议开启。安全模式(secure-port)该模式下开启TLS时,所有请求都需要经过认证。k8s支持多种认证机制,并支持同时开启多个认证插件(只要有一个认证通过即可)。如果认证成功,则用户的username会传入授......
  • 日常网络安全防范小知识,平时可能忽略的小细节也可能会造成重大损失
    日常生活中,可能很多人都遇到过这样的问题:陌生来电、垃圾短信不断,网上浏览某件商品或输入某个关键词,很快就会收到手机APP推送的相关广告或信息。原因很简单,你的个人信息在网络上泄露了。网络安全为人民,网络安全靠人民。作为普通网民,每个人都应当增强防范意识,了解网络安全保密常识......
  • 无涯教程-Redis - 安全密码
    可以保护Redis数据库,以使创建连接的所有客户端都需要在执行命令之前进行身份验证,为了保护Redis,需要在配置文件中设置密码。以下示例显示了保护Redis的步骤。127.0.0.1:6379>CONFIGgetrequirepass1)"requirepass"2)""默认情况下,此属性为空白,表示未为此设置密码。您可......