浏览器安全可分为三大块——网页安全、浏览器网络安全、浏览器系统安全。原产地政策)。网页安全同源策略(Same-originpolicy)如果两个URL的协议、域名和端口相同,我们称这两个URL为同源。默认情况下,浏览器可以在两个相同的源之间访问资源和操作DOM。如果两个不同的源要访问资源或操作DOM,就会有一组基本的安全策略约束,我们称之为同源策略。主要表现在DOM层面的同源策略限制不同来源的JavaScript脚本对当前DOM对象的读写操作。数据层面的同源策略限制不同来源的站点读取当前站点的cookies、IndexDB、LocalStorage等数据。网络层面的同源策略限制了通过XMLHttpRequest等方式将站点数据发送到不同来源的安全性和便利性,但是安全性和便利性是相互对立的,完全隔离不同来源的措施无疑是最安全的,但它也使Web项目难以开发和使用。因此,我们必须在这些之间做出取舍,出售一些证券来满足灵活性;出售的安全页面可以嵌入第三方资源页面,在页面中可以引用第三方资源,但是这样也暴露了很多XSS等安全问题,所以基于这种开放性,CSP(ContentSecurityPolicy)引入是为了限制其自由度。CSP的核心思想是让服务器决定浏览器可以加载哪些资源,让服务器决定浏览器是否可以执行内联JavaScript代码。跨文档消息机制来自两个不同源的DOM不能相互操作。文档消息机制可以通过window.postMessage的JavaScript接口与不同的DOM源进行通信。跨域资源共享不同域之间的XMLHttpRequest和Fetch不能直接进行跨域请求。浏览器在这种严格的政策基础上引入了跨域资源共享策略(CORS)。利用这种机制,可以进行跨域的资源共享。跨域访问控制,使跨域数据传输可以安全进行。Web网络安全我们使用HTTP传输的内容很容易被中间人窃取、伪造和篡改,我们通常称这种攻击为中间人攻击。具体来说,HTTP数据提交到TCP层后,数据会经过用户电脑、WiFi路由器、运营商、目标服务器。在这些链接中的每一个中,数据都可能被盗或被篡改。例如,如果用户的计算机被黑客入侵并安装了恶意软件,则恶意软件可以捕获并修改发送的HTTP请求的内容。或者,如果用户不小心连接到WiFi钓鱼路由器,数据也可能被黑客捕获或篡改。在HTTP协议栈中引入安全层鉴于HTTP的明文传输使得传输过程不安全,限制了网上购物、网上转账等一系列场景,我们不得不引入加密方案。从HTTP协议栈的角度来看,我们可以在TCP和HTTP之间插入一个安全层,所有通过安全层的数据都会被加密或解密。安全层有两个主要职责:加密发起HTTP请求的数据和解密接收到的HTTP内容。HTTPS传输数据在数据传输阶段仍然使用对称加密,但是我们使用非对称加密来传输对称加密密钥。首先,浏览器将对称密码组列表、非对称密码组列表和随机数client-random发送给服务器;服务器保存随机数client-random,选择对称加密和非对称加密套件,然后生成随机数service-random,将选择的加密套件、service-random和公钥发送给浏览器;浏览器保存公钥并生成随机数pre-master,然后用公钥对pre-master进行加密,并将加密后的数据发送给服务器;最后,服务器取出自己的私钥,对pre-master数据进行解密,返回确认信息。通过上述数字证书的方法,我们实现了数据的加密传输,但是这种方法仍然存在问题。黑客通过DNS劫持将网站的IP地址替换为黑客的IP地址,这样访问的实际上就是黑客的服务器。黑客可以在自己的服务器上实现公钥和私钥,但是对于浏览器来说,它并不知道现在访问的是黑客站点。所以我们也需要服务器向浏览器提供“我就是我”的证明。为了证明我是我,我需要使用权威机构颁发的证书。这个机构称为CA(CertificateAuthority),颁发的证书称为数字证书(DigitalCertificate)。数字证书有两个作用:一是通过数字证书向浏览器证明服务器的身份,二是数字证书包含服务器公钥。完整的HTTPS请求流程通过引入数字证书,我们实现了服务器的身份认证功能,这样即使黑客伪造了服务器,由于证书无法伪造,仍然无法欺骗用户。总结我们使用对称加密来实现安全层,但是由于对称加密的密钥需要明文传输,所以我们将对称加密转化为非对称加密。但是非对称加密效率低下,无法加密从服务器到浏览器的数据,所以我们继续改变安全层,使用对称加密加密传输数据,非对称加密传输密钥,这样就可以解决传输效率的问题以及两端数据安全传输的问题。这种方式虽然可以保证数据的安全传输,但是仍然没有办法证明服务器是可靠的,所以引入了数字证书。数字证书由CA签发,浏览器可以验证证书的可靠性。系统安全浏览器安全架构如果浏览器暴露出漏洞,如果不及时修复这些漏洞,黑客可能会通过恶意页面向浏览器注入恶意程序。最常见的攻击方法是利用缓冲区溢出。与XSS攻击页面相比,这种攻击无疑是一颗“核弹”,会将整个操作系统的内容暴露给黑客,让我们操作系统上的所有信息都不安全。为了提高安全性,浏览器采用了如下的多进程架构。它还提供安全沙箱和站点隔离,以进一步加强安全沙箱的安全性。由于渲染进程需要进行DOM解析、CSS解析、网络图片解码等操作,如果渲染进程存在系统级漏洞,上述操作可能会导致恶意站点获得渲染进程的控制权限,进而获取操作系统的控制权限,这对用户来说是非常危险的。基于以上原因,我们需要在渲染进程和操作系统之间建立一堵墙。即使渲染进程因漏洞被黑,黑客也无法因为这堵墙而获得渲染进程外的任何操作权限。将渲染进程与操作系统隔离开来的墙就是我们所说的安全沙箱。浏览器中的安全沙箱利用操作系统提供的安全技术,防止渲染进程在执行过程中访问或修改操作系统中的数据。当渲染进程需要访问系统资源时,需要通过浏览器内核来实现,然后将访问结果通过IPC转发给渲染进程。安全沙箱的最小保护单元是进程。由于单进程浏览器需要频繁访问或修改操作系统数据,单进程浏览器无法得到安全沙箱的保护,现代浏览器采用的多进程架构使得安全沙箱发挥作用。受安全沙箱影响的模块函数是用于读写cookie数据的持久化存储。通常浏览器内核会维护一个cookie数据库,里面存放着所有的cookies,然后在渲染进程通过JavaScript读取cookies的时候,渲染进程通过IPC将读取cookies的信息发送给浏览器内核,浏览器内核读取完cookies后,然后将内容返回给渲染进程。一些缓存文件的读写也是由浏览器内核实现的,比如网络文件缓存的读取。网络访问也有安全沙箱保护,渲染进程不能直接访问网络。如果要访问网络,则需要通过浏览器内核。但是浏览器内核在处理一个URL请求之前,会检查渲染进程是否有请求该URL的权限,比如检查XMLHttpRequest或Fetch是否是跨站请求,或者检测HTTPS站点是否包含HTTP请求。用户交互为了限制渲染进程监听用户输入事件的能力,所有的键盘鼠标事件都由浏览器内核接收,然后浏览器内核将这些事件通过IPC发送给渲染进程。渲染过程需要渲染出位图。为了将渲染进程渲染的位图显示给用户,渲染进程需要将生成的位图发送给浏览器内核,然后浏览器内核将位图复制到屏幕上。操作系统不是将用户输入事件直接传递给渲染进程,而是将这些事件传递给浏览器内核。然后浏览器内核根据当前浏览器界面的状态判断如何调度这些事件。如果当前焦点在浏览器地址栏,输入事件将在浏览器内核内部处理;如果当前焦点在页面区域,那么浏览器内核会将输入事件转发给渲染进程。站点隔离所谓站点隔离,就是Chrome将同一个站点中相互关联的页面(包括具有相同根域名和相同协议的地址)放入同一个渲染进程中执行。由于渲染进程最初是按照标签页来划分的,如果一个标签页中有多个来自不同来源的iframe,那么这些iframe也会被分配到同一个渲染进程中,这就很容易被黑客利用iframe。攻击当前渲染进程。站点隔离会将不同来源的iframe分配给不同的渲染进程,这样即使黑客攻击了恶意iframe的渲染进程,也不会影响其他渲染进程。作者:一只菜鸟攻城狮链接:https://www.cnblogs.com/suihang/p/13271872.html
