系统安全
浏览器架构
单进程架构的浏览器是不稳定的,只要任意一个如页面卡死、浏览器崩溃都会影响整个浏览器。
浏览器本身的漏洞也是单进程浏览器的一个问题。如果漏洞没有修复,黑客可以通过恶意页面向浏览器注入恶意程序,比如利用缓冲区溢出。不过和XSS
注入脚本是不一样的XSS
攻击只是将恶意的JS
注入到页面中,虽然可以窃取cookie
数据,但无法对操作系统进行攻击。
浏览器漏洞的攻击是可以入侵浏览器进程内部的,可以读取和修改浏览器进程内部的任意内容,还可以穿透浏览器。在操作系统上安装恶意软件,监听用户键盘输入信息及读取硬盘上的内容,所有资料都不安全了。
现代浏览器采用了多进程架构,将渲染进程和浏览器主进程做了分离。主要分为浏览器内核(网络进程、主进程、GPU
进程)和渲染内核(渲染进程)2个核心模块。
网络资源通过浏览器内核来下载,下载后资源通过IPC
交给渲染进程(浏览器内核和渲染进程之间都是通过IPC
来通信的),然后渲染进程会对这些资源进行解析,绘制等最终成一幅图片。但渲染进程不负责将图片显示到界面上,而是将生成的图片给浏览器内核模块,由浏览器内核负责显示这张图片。
安全沙箱
由于渲染进程需要执行DOM
解析、CSS
解析、网络图片解码等操作,如果渲染进程中存在系统级的漏洞,那么以上操作就有可能让恶意的站点获取到渲染进程的控制权限,进而又获取到操作系统的控制权,对用户来说是非常危险的。
如果下载了一个恶意程序,没有执行,它是不会生效的。因此需要在渲染进程和操作系统中间建一道墙。即使渲染进程有漏洞,但有墙,黑客也获取不到渲染进程之外的任何操作权限。渲染进程和操作系统隔离的这道墙叫做安全沙箱。
浏览器的安全沙箱是利用操作系统提供的安全技术。让渲染进程在执行过程中无法访问或者修改操作系统的数据。在渲染进程要访问资源时,要通过浏览器内核来实现,然后访问结果通过IPC
发给渲染进程。
渲染进程:HTML
解析、CSS
解析、图片解码、JS
执行、布局、绘制、XML
解析。
浏览器内核:cookie
存储、cache
存储、网络请求、文件读取、下载管理、SSL
/TSC
、浏览器字窗口管理。
渲染进程需要沙箱的保护,它没有读写系统的功能(读写本地文件、发起请求、调用GPU
接口),因此涉及和系统交互的功能都转移到浏览器内核去实现。
由于渲染进程采用了安全沙箱,所以在渲染进程内部不能与操作系统直接交互,于是就在浏览器内核中实现了持久存储、网络访问和用户交互等一系列与操作系统交互的功能,然后通过 IPC
和渲染进程进行交互。
网络安全
HTTPS
HTTP
传输数据是明文的。在将数据提交给TCP
层之后,数据会经过用户电脑、wifi
路由器、运营商和目标服务器等环节,每个环节数据都有可能被窃取、伪造和篡改。如用户电脑被装了恶意软件,或用户不小心连了wifi
钓鱼路由器。那数据都可能被黑客抓取或篡改。
由于HTTP
的明文传输不安全,且制约了网上购物、在线转账等。于是引入了加密方案,就是在TCP
和HTTP
之间加安全层(SSL/TLS
),经过安全层的数据都会被加密或解密。对发起HTTP
请求进行加密,对收到HTTP
内容进行解密。
对称加密
对称加密 :加密和解密都是用一样的密钥。https
要先让浏览器和服务器协商加密方式和密钥。
- 浏览器发给支持的加密套件列表和一个随机数
client-random
, - 服务器从列表中选择一个加密套件+随机数
server-random
给浏览器。 - 双方返回确认消息。
然后他们将client-random
和server-random
混合生成密钥master server
。就可以进行加密传输了。
不过由于传client-random
和server-random
的过程是明文的,合成密钥算法是公开的,数据依然可以被破解。
非对称加密
非对称加密:加密算法有A
、B
2把密钥,用A
加密只能用B
解密,反之一样。服务器会将其中一个密钥通过明文发给浏览器(公钥),服务器留下的叫密钥。
服务器上有给浏览器加密的公钥和解密http
数据的私钥。
公钥加密的数据只有私钥才能解密,即使截了公钥和数据也解不了密。
- 效率低,影响加解密速度,也影响打开页面速度。
- 无法保证服务器给的数据安全,浏览器可以用公钥加密,但服务器只能用私钥加密。
私钥加密只有公钥能解密,但黑客也可以拿到公钥,可以解服务器传输数据。
对称非对称搭配
对称非对称搭配使用,传输数据使用对称加密,对称加密的密钥使用非对称加密来传输。
- 浏览器向服务器发送对称加密套件列表,非对称加密套件列表和
client-random
随机数。 - 服务器保存
client-random
,选择对称加密和非对称加密套件生成server-random
+公钥发给浏览器。 - 浏览器保存公钥,生成
pre-master
随机数,用公钥对pre-master
加密发送服务器。 - 服务器用私钥解密
pre-master
返回确认消息,
然后浏览器和服务器通过client-random
,server-random
,pre-master
通过相同方法生成对称密钥。pre-master
是通过公钥加密传输的,黑客无法获取pre-master
也无法生成密钥,无法破解数据。
添加数字证书
黑客有可能会把官网IP
地址的DNS
劫持换成黑客的IP
,那我们访问的就是黑客的服务器了。黑客自己实现公钥私钥,要证明服务器是要访问的服务器,就需要权威机构颁发的(CA
)颁发的证书(数字证书)
数字证书:向浏览器证明服务器身份、包含了服务器公钥。
- 服务器没有直接返回公钥给浏览器,而是返回了数字证书,里面包含了公钥
- 浏览器多了一个证书验证的操作,验证之后再继续
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。