脚本宝典收集整理的这篇文章主要介绍了浏览器安全——Web页面安全&浏览器网络安全(HTTPS)&浏览器系统安全,脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
请移步:极客时间——浏览器中的安全
同源: 页面中最基础、最核心的安全策略:同源策略(Same-origin policy)。浏览器默认两个相同的源之间是可以相互访问资源和操作 DOM 的。 什么是同源?如果两个页面拥有相同的协议、域名和端口,那么这两个页面具有相同的源。 同源政策:是浏览器提供的一个安全功能。是为了保证用户信息的安全,防止恶意的网站窃取数据。 同源策略主要表现在 DOM、Web 数据和网络这三个层面。 第一个,DOM 层面。同源策略限制了来自不同源的 JavaScript 脚本对当前 DOM 对象读和写的操作。(解决:跨文档消息机制:通过window.postMessage 的 JavaScript 接口来和不同源的 DOM 进行通信。) 第二个,数据层面。同源策略限制了不同源的站点读取当前站点的 Cookie、IndexDB、LocalStorage 等数据。 第三个,网络层面。同源策略限制了通过 XMLHttpRequest 等方式将站点的数据发送给不同源的站点。 跨域: 什么是跨域?同源指的是两个url的协议、域名、端口一致,反之则是跨域。出现的根本原因:由浏览器的同源策略导致。
如何解决跨域?实现跨域数据请求有三种解决方案:JSONP、CORS和通过自家服务器访问别的服务器再响应回自家客户端。 第三种方法: 脚手架配置代理 JSONP: 注意JSONP和Ajax之间没有任何关系,不能把JSONP请求数据的方式叫做ajax,因为JSONP没有用到XMLHttpRequest这个对象。 JSONP的实现原理:JSONP是JSON的一种“使用模式” 手写JSONP(封装JSONP): <script>
function jsonp(options){
var script=document.createElement('script');
var fnName='myJsonp'+Math.random().toString().replace('.','')
window[fnName]=options.success;//.后面不能跟变量,只能跟属性,所以用中括号
var params='';
for(let attr in options.data){
params+='&'+attr+'='+options.data[attr];//jsonp属于get请求
}
script.src=options.url+'?callback='+fnName+params;
document.body.appendChild(script);
script.onload=function(){
document.body.removeChild(script);
}
}
jsonp({
url:'http://localhost:3001/better',
data:{
name:'lisi',
age:19
},
success:function(data){
console.log(data);
}
})
使用JSONP的风险:
CORS(cross origin resource sharing跨域资源共享): 它允许浏览器向跨域服务器发送Ajax请求,克服了浏览器的同源政策。(客户端不做什么,主要是服务器端响应头中做一些改动,设置哪些客户端可以访问服务器以及设置客户端可以以哪种方式(get/post)访问服务器)
总结:支持页面中的第三方资源引用和 CORS 也带来了很多安全问题,其中最典型的就是 XSS 攻击。 什么是XSS攻击?XSS 全称是 Cross Site Scripting。XSS攻击是指黑客往HTML文件或者DOM中注入恶意脚本,从而在用户浏览页面时利用注入的恶意脚本对用户实施攻击的一种手段。 恶意脚本能做的事情:
常见的注入恶意脚本的方式:存储型XSS攻击、反射性XSS攻击、基于DOM的XSS攻击。 1,存储型XSS攻击
攻击步骤: 首先黑客利用站点漏洞将一段恶意 JavaScript 代码提交到网站的数据库中; 然后用户向网站请求包含了恶意 JavaScript 脚本的页面; 当用户浏览该页面的时候,恶意脚本就会将用户的 Cookie 信息等数据上传到服务器 2,反射型XSS攻击 在一个反射型 XSS 攻击过程中,恶意 JavaScript 脚本属于用户发送给网站请求中的一部分,黑客通过各种方式诱导用户去点击恶意链接,随后网站又把恶意 JavaScript 脚本返回给用户。当恶意 JavaScript 脚本在用户页面中被执行时,黑客就可以利用该脚本做一些恶意操作。 Web 服务器不会存储反射型 XSS 攻击的恶意脚本,这是和存储型 XSS 攻击不同的地方。 3,基于DOM的XSS攻击 基于 DOM 的 XSS 攻击是不牵涉到页面 Web 服务器的。具体来讲,黑客通过各种手段将恶意脚本注入用户的页面中,比如通过网络劫持在页面传输过程中修改 HTML 页面的内容,这种劫持类型很多,有通过 WiFi 路由器劫持的,有通过本地恶意软件来劫持的,它们的共同点是在 Web 资源传输过程或者在用户使用页面的过程中修改 Web 页面的数据。如何阻止XSS攻击? 我们知道存储型 XSS 攻击和反射型 XSS 攻击都是需要经过 Web 服务器来处理的,因此可以认为这两种类型的漏洞是服务端的安全漏洞。而基于 DOM 的 XSS 攻击全部都是在浏览器端完成的,因此基于 DOM 的 XSS 攻击是属于前端的安全漏洞。 但无论是何种类型的 XSS 攻击,它们都有一个共同点,那就是首先往浏览器中注入恶意脚本,然后再通过恶意脚本将用户信息发送至黑客部署的恶意服务器上。 所以要阻止 XSS 攻击,我们可以通过阻止恶意 JavaScript 脚本的注入和阻止恶意消息的发送来实现。 常见策略:
当然除了以上策略之外,我们还可以通过添加验证码防止脚本冒充用户提交危险操作。而对于一些不受信任的输入,还可以限制其输入长度,这样可以增大 XSS 攻击的难度。
什么是CSRF攻击? CSRF 英文全称是 Cross-site request forgery,所以又称为“跨站请求伪造”,是指黑客引诱用户打开黑客的网站,在黑客的网站中,利用用户的登录状态发起的跨站请求。简单来讲,CSRF 攻击就是黑客利用了用户的登录状态,并通过第三方的站点来做一些坏事。 通常当用户打开了黑客的页面后,黑客有三种方式去实施 CSRF 攻击: 1,自动发起Get请求 举例,在黑客的页面中,有一张图片的src对应的链接是一个转账的api,当用户被引诱进入了黑客的页面,页面被加载的时候,浏览器会自动发器img的资源请求,同时,借用用户的登录状态,就完成了这个转账的操作。 2,自动发起POST请求 举例,在黑客的页面中,有一个隐藏的表单,表单的内容为转账的api,当用户进入这个页面,表单被自动提交,服务器就会执行转账操作。 3,引诱用户点击链接 举例,通过引诱用户点击某个黑客的链接,该链接为转账的api,一旦点击链接,服务器就会执行转账操作。
和 XSS 不同的是,CSRF 攻击不需要将恶意代码注入用户的页面,因此黑客是无法通过 CSRF 攻击来获取用户页面数据的;仅仅是利用服务器的漏洞和用户的登录状态来实施攻击,所以要提高服务器安全性。
如何防止CSRF攻击? 发起 CSRF 攻击的三个必要条件: 第一个,目标站点一定要有 CSRF 漏洞; 第二个,用户要登录过目标站点,并且在浏览器上保持有该站点的登录状态;第三个,需要用户打开一个第三方站点,可以是黑客的站点,也可以是一些论坛。 要让服务器避免遭受到 CSRF 攻击,通常有以下几种途径:
总结: 页面安全问题的主要原因就是浏览器为同源策略开的两个“后门”:一个是在页面中可以任意引用第三方资源,另外一个是通过 CORS 策略让 XMLHttpRequest 和 Fetch 去跨域请求资源。
网络安全协议HTTPS HTTP是明文传输,使用 HTTP 传输的内容很容易被中间人窃取、伪造和篡改,通常我们把这种攻击方式称为中间人攻击。 所以在 HTTP 协议栈中引入安全层:
从图中我们可以看出 HTTPS 并非是一个新的协议,通常 HTTP 直接和 TCP 通信,HTTPS 则先和安全层通信,然后安全层再和 TCP 层通信。也就是说 HTTPS 所有的安全核心都在安全层,它不会影响到上面的 HTTP 协议,也不会影响到下面的 TCP/IP,因此要搞清楚 HTTPS 是如何工作的,就要弄清楚安全层是怎么工作的。总的来说,安全层有两个主要的职责:对发起 HTTP 请求的数据进行加密操作和对接收到 HTTP 的内容进行解密操作。 第一版:使用对称加密 所谓对称加密是指加密和解密都使用的是相同的密钥。 第二版:使用非对称加密(公钥和私钥) 第三版:对称加密和非对称加密搭配使用 在传输数据阶段依然使用对称加密,但是对称加密的密钥我们采用非对称加密来传输。 第四版:添加数字证书 HTTPS握手过程: HTTPS(TLS握手过程)&TCP协议(三次握手四次挥手)HTTPS连接中接收/发送HTTP数据包会怎么样? 会怎么样: HTTPS会不高兴,浏览器也会不高兴。 阻止掉HTTP的AJAX请求,然后报一个Mixed Content的错误(黄色的警告)。 引入一个HTTP请求的 js 文件,会被浏览器直接 block 掉。 解决方案: 相对协议:将URL的协议(http、https)去掉,只保留//及后面的内容。 iframe:使用 iframe 的方式引入 http 资源
浏览器的单进程架构的不足: 浏览器本身的漏洞是单进程浏览器的一个主要问题,如果浏览器被曝出存在漏洞,那么在这些漏洞没有被及时修复的情况下,黑客就有可能通过恶意的页面向浏览器中注入恶意程序,其中最常见的攻击方式是利用缓冲区溢出,不过需要注意这种类型的攻击和 XSS 注入的脚本是不一样的。XSS 攻击只是将恶意的 JavaScript 脚本注入到页面中,虽然能窃取一些 Cookie 相关的数据,但是 XSS 无法对操作系统进行攻击。而通过浏览器漏洞进行的攻击是可以入侵到浏览器进程内部的,可以读取和修改浏览器进程内部的任意内容,还可以穿透浏览器,在用户的操作系统上悄悄地安装恶意软件、监听用户键盘输入信息以及读取用户硬盘上的文件内容。 浏览器的多进程架构:
将渲染进程和操作系统隔离的这道墙就是安全沙箱。 浏览器中的安全沙箱是利用操作系统提供的安全技术,让渲染进程在执行过程中无法访问或者修改操作系统中的数据,在渲染进程需要访问系统资源的时候,需要通过浏览器内核来实现,然后将访问的结果通过 IPC 转发给渲染进程。安全沙箱最小的保护单位是进程。因为单进程浏览器需要频繁访问或者修改操作系统的数据,所以单进程浏览器是无法被安全沙箱保护的,而现代浏览器采用的多进程架构使得安全沙箱可以发挥作用。 我们知道安全沙箱最小的保护单位是进程,并且能限制进程对操作系统资源的访问和修改,这就意味着如果要让安全沙箱应用在某个进程上,那么这个进程必须没有读写操作系统的功能,比如读写本地文件、发起网络请求、调用 GPU 接口等。 浏览器内核和渲染进程各自职责: 通过该图,我们可以看到由于渲染进程需要安全沙箱的保护,因此需要把在渲染进程内部涉及到和系统交互的功能都转移到浏览器内核中去实现。以上是脚本宝典为你收集整理的浏览器安全——Web页面安全&浏览器网络安全(HTTPS)&浏览器系统安全全部内容,希望文章能够帮你解决浏览器安全——Web页面安全&浏览器网络安全(HTTPS)&浏览器系统安全所遇到的问题。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。