浏览器安全

浏览器平安可以分为三大块——Web 页面平安、浏览器网络平安和浏览器系统平安

在web页面中的平安计谋中最基础、最焦点的平安计谋:同源计谋(Same-origin policy)。

浏览器安全

Web 页面平安

同源计谋(Same-origin policy)

若是两个 URL 的协议、域名和端口都相同,我们就称这两个 URL 同源。浏览器默认两个相同的源之间是可以相互接见资源和操作 DOM 的。两个差别的源之间若想要相互接见资源或者操作 DOM,那么会有一套基础的平安计谋的制约,我们把这称为同源计谋。

主要显示

  • DOM 层面

同源计谋限制了来自差别源的 JavaScript 剧本对当前 DOM 工具读和写的操作。

  • 数据层面

同源计谋限制了差别源的站点读取当前站点的 Cookie、IndexDB、LocalStorage 等数据。

  • 网络层面

同源计谋限制了通过 XMLHttpRequest 等方式将站点的数据发送给差别源的站点

平安和便利性

不外平安性和便利性是相互对立的,让差别的源之间绝对隔离,无疑是最平安的措施,但这也会使得 Web 项目难以开发和使用。因此我们就要在这之间做出权衡,出让一些平安性来知足灵活性;

出让的平安性

  • 页面中可以嵌入第三方资源

页面中可以引用第三方资源,不外这也露出了许多诸如 XSS 的平安问题,因此又在这种开放的基础之上引入了 CSP (内容平安计谋)来限制其自由水平。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(Certificate Authority),发表的证书就称为数字证书(Digital Certificate)。

数字证书有两个作用:一个是通过数字证书向浏览器证实服务器的身份,另一个是数字证书内里包含了服务器公钥。

通过源码学习@functools.lru_cache

浏览器安全

                                                    完整的HTTPS请求流程

通过引入数字证书,我们就实现了服务器的身份认证功效,这样即便黑客伪造了服务器,然则由于证书是没有办法伪造的,以是依然无法诱骗用户。

总结

我们使用对称加密实现了平安层,然则由于对称加密的密钥需要明文传输,以是我们又将对称加密革新成了非对称加密。然则非对称加密效率低且不能加密服务器到浏览器端的数据,于是我们又继续改在平安层,接纳对称加密的方式加密传输数据和非对称加密的方式来传输密钥,这样我们就解决传输效率和两头数据平安传输的问题。接纳这种方式虽然能保证数据的平安传输,然则依然没办法证实服务器是可靠的,于是又引入了数字证书,数字证书是由 CA 署名过的,以是浏览器能够验证该证书的可靠性

 

浏览器系统平安

浏览器平安架构

若是浏览器被曝出存在破绽,那么在这些破绽没有被实时修复的情况下,黑客就有可能通过恶意的页面向浏览器中注入恶意程序,其中最常见的攻击方式是行使缓冲区溢出。和 XSS 攻击页面相比,这类攻击无疑是枚“核弹”,它会将整个操作系统的内容都露出给黑客,这样我们操作系统上所有的资料都是不平安的了。为了提高平安性,浏览器的接纳了如下的多历程架构。而且提供了平安沙箱和站点隔离来进一步增强平安

浏览器安全

平安沙箱

由于渲染历程需要执行 DOM 剖析、CSS 剖析、网络图片解码等操作,若是渲染历程中存在系统级别的破绽,那么以上操作就有可能让恶意的站点获取到渲染历程的控制权限,进而又获取操作系统的控制权限,这对于用户来说是异常危险的。基于以上缘故原由,我们需要在渲染历程和操作系统之间建一道墙,即便渲染历程由于存在破绽被黑客攻击,但由于这道墙,黑客就获取不到渲染历程之外的任何操作权限。将渲染历程和操作系统隔离的这道墙就是我们要聊的平安沙箱。

浏览器中的平安沙箱是行使操作系统提供的平安手艺,让渲染历程在执行历程中无法接见或者修改操作系统中的数据,在渲染历程需要接见系统资源的时刻,需要通过浏览器内核来实现,然后将接见的效果通过 IPC 转发给渲染历程。平安沙箱最小的珍爱单元是历程。由于单历程浏览器需要频仍接见或者修改操作系统的数据,以是单历程浏览器是无法被平安沙箱珍爱的,而现代浏览器接纳的多历程架构使得平安沙箱可以发挥作用。

平安沙箱影响的模块功效

  • 持久存储

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

  • 网络接见

同样有了平安沙箱的珍爱,在渲染历程内部也是不能直接接见网络的,若是要接见网络,则需要通过浏览器内核。不外浏览器内核在处置 URL 请求之前,会检查渲染历程是否有权限请求该 URL,好比检查 XMLHttpRequest 或者 Fetch 是否是跨站点请求,或者检测 HTTPS 的站点中是否包含了 HTTP 的请求。

  • 用户交互

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

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

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

站点隔离

所谓站点隔离是指 Chrome 将同一站点(包含了相同根域名和相同协议的地址)中相互关联的页面放到同一个渲染历程中执行。由于最初都是根据标签页来划分渲染历程的,以是若是一个标签页内里有多个差别源的 iframe,那么这些 iframe 也会被分配到同一个渲染历程中,这样就很容易让黑客通过 iframe 来攻击当前渲染历程。而站点隔离会将差别源的 iframe 分配到差别的渲染历程中,这样纵然黑客攻击恶意 iframe 的渲染历程,也不会影响到其他渲染历程的。

 

参考自

浏览器原理与实践

百度百科

原创文章,作者:admin,如若转载,请注明出处:https://www.2lxm.com/archives/21435.html