浏览器安全:xss及CSRF攻击有何特点?如何防御-灵析社区

前端码农

浏览器原理与实践系列文章内容来自极客时间李兵老师《浏览器工作原理与实践》,主要是记录自己的学习过程,基于自己的理解对内容做的一些总结,包括《宏观视角下的浏览器:地址栏键入URL后会发生什么?HTML,CSS,JS又是怎么变成页面显示出来的》《JS中内存机制、数据类型、V8引擎垃圾回收原理、V8怎样执行JS代码,据此可以做哪些性能优化》《V8引擎工作原理》《事件循环系统:宏任务微任务如何有条不紊的执行?》《浏览器中的页面:重绘重排及合成?如何提高页面渲染性能》《网络协议:http1、http2、http3都有些什么优缺点?》《浏览器安全:xss及CSRF攻击有何特点?如何防御》共七篇,此为第七篇

浏览器安全

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

web页面安全

什么是同源策略

如果两个URL的协议、域名和端口都相同,就称这两个URL同源。 浏览器默认两个相同的源之间是可以相互访问资源和操作DOM的。

具体来讲,同源策略主要表现在DOM、Web数据和网络这三个层面:

  1. DOM层面。同源策略限制了来自不同源的JavaScript脚本对当前DOM对象读和写的操作。
  2. 数据层面。同源策略限制了不同源的站点读取当前站点的Cookie、IndexDB、LocalStorage等数据。
  3. 网络层面。同源策略限制了通过XMLHttpRequest等方式将站点的数据发送给不同源的站点

安全和便利性之间的权衡

同源策略会隔离不同源的DOM、页面数据和网络通信,进而实现Web页面的安全性。不过安全性和便利性是相互对立的,让不同的源之间绝对隔离,无疑是最安全的措施,但这也会使得Web项目难以开发和使用。因此就要在这之间做出权衡,出让一些安全性来满足灵活性;而出让安全性又带来了很多安全问题,最典型的是XSS攻击和CSRF攻击。

同源策略的安全性主要有两方面:

  1. 页面中可以嵌入第三方资源:Web世界是开放的,可以接入任何资源,而同源策略要让一个页面的所有资源都来自于同一个源,也就是要将该页面的所有HTML文件、JavaScript文件、CSS文件、图片等资源都部署在同一台服务器上,这无疑违背了Web的初衷,也带来了诸多限制。比如将不同的资源部署到不同的CDN上时,CDN上的资源就部署在另外一个域名上,因此就需要同源策略对页面的引用资源开一个“口子”,让其任意引用外部文件。为了解决XSS攻击,浏览器中引入了内容安全策略,称为CSP。CSP的核心思想是让服务器决定浏览器能够加载哪些资源,让服务器决定浏览器是否能够执行内联JavaScript代码。通过这些手段就可以大大减少XSS攻击。
  2. 跨域资源共享和跨文档消息机制: 为了能在不同页面间通过XMLHttpRequest或者Fetch来请求,浏览器还引入了跨域资源共享(CORS) ,使用该机制可以进行跨域访问控制,从而使跨域数据传输得以安全进行。除此之外,两个不同源的页面,无法相互操纵DOM。不过在实际应用中,经常需要两个不同源的DOM之间进行通信,于是浏览器中又引入了跨文档消息机制,可以通过window.postMessage的JavaScript接口来和不同源的DOM进行通信。

XSS攻击

XSS全称是Cross Site Scripting,为了与“CSS”区分开来,故简称XSS,翻译过来就是“跨站脚本”。XSS攻击是指黑客往HTML文件中或者DOM中注入恶意脚本,从而在用户浏览页面时利用注入的恶意脚本对用户实施攻击的一种手段。跨站脚本攻击可以做很多事,比如以下几点:

  • 可以窃取Cookie信息。恶意JavaScript可以通过“document.cookie”获取Cookie信息,然后通过XMLHttpRequest或者Fetch加上CORS功能将数据发送给恶意服务器;恶意服务器拿到用户的Cookie信息之后,就可以在其他电脑上模拟用户的登录,然后进行转账等操作。
  • 可以监听用户行为。恶意JavaScript可以使用“addEventListener”接口来监听键盘事件,比如可以获取用户输入的信用卡等信息,将其发送到恶意服务器。黑客掌握了这些信息之后,又可以做很多违法的事情。
  • 可以通过修改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攻击

  1. 服务器对输入脚本进行过滤或转码
  2. 充分利用CSP
  3. 使用httpOnly属性
  4. 限制输入长度
  5. 添加验证码防止脚本冒充用户提交危险操作

CSRF攻击

CSRF英文全称是Cross-site request forgery,又称为“跨站请求伪造”,是指黑客引诱用户打开黑客的网站,在黑客的网站中,利用用户的登录状态发起的跨站请求。简单来讲,CSRF攻击就是黑客利用了用户的登录状态,并通过第三方的站点来做一些坏事。以下是一些常见的csrf攻击方式:

  1. 自动发起GET请求
<img src="https://xxx/sendcoin?user=hacker&number=100">
  1. 自动发起POST请求
<form id="hacker-form" action="https://xxx/sendcoin" method="POST">
    <input type="hidden" name="user" value="hacker">
    <input type="hidden" name="number" value="100">
</form>
<script> document.getElementById('hacker-form').submit(); </script>
  1. 引诱用户点击链接 xml复制代码
<div><img width="150" src="http://images.xuejuzi.cn/1612/1_161230185104_1.jpg"></div>
<div>
  <a href="https://xxx/sendcoin?user=hacker&number=100" taget="_blank">
    点击下载美女照片
  </a>
</div>

发起CSRF攻击的三个必要条件:

  • 第一个,目标站点一定要有CSRF漏洞;
  • 第二个,用户要登录过目标站点,并且在浏览器上保持有该站点的登录状态;
  • 第三个,需要用户打开一个第三方站点,可以是黑客的站点,也可以是一些论坛。

如何防止CSRF攻击

  1. 充分利用好Cookie 的 SameSite 属性
  2. 验证请求的来源站点
  3. CSRF Token

浏览器网络安全

由于http是明文传输,传输过程每一个环节数据都有可能被窃取和篡改,因此使用http进行通信是不安全的。由此诞生了HTTPS。

HTTPS在传输层引入了安全层(SSL/TLS),安全层会对整个通信进行加密,传输过程都使用加密后的密文通信,同时引入CA证书,便于浏览器验证服务器。

HTTPS安全层和CA证书的引入,保证了传输过程中数据的安全性,同时也能保证通信双方的身份,比如CA的存在,使得黑客无法冒充服务器和浏览器通信。

浏览器系统安全

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

由于渲染进程需要执行DOM解析、CSS解析、网络图片解码等操作,如果渲染进程中存在系统级别的漏洞,那么以上操作就有可能让恶意的站点获取到渲染进程的控制权限,进而又获取操作系统的控制权限,这对于用户来说是非常危险的。因为网络资源的内容存在着各种可能性,所以浏览器会默认所有的网络资源都是不可信的,都是不安全的。但谁也不能保证浏览器不存在漏洞,只要出现漏洞,黑客就可以通过网络内容对用户发起攻击。

如果下载了一个恶意程序,但是没有执行它,那么恶意程序是不会生效的。同理,浏览器之于网络内容也是如此,浏览器可以安全地下载各种网络资源,但是如果要执行这些网络资源,比如解析HTML、解析CSS、执行JavaScript、图片编解码等操作,就需要非常谨慎了,因为一不小心,黑客就会利用这些操作对含有漏洞的浏览器发起攻击。基于此,需要在渲染进程和操作系统之间建一道墙,即便渲染进程由于存在漏洞被黑客攻击,但由于这道墙,黑客就获取不到渲染进程之外的任何操作权限。将渲染进程和操作系统隔离的这道墙就是安全沙箱

安全沙箱最小的保护单位是进程,并且能限制进程对操作系统资源的访问和修改,这就意味着如果要让安全沙箱应用在某个进程上,那么这个进程必须没有读写操作系统的功能,比如读写本地文件、发起网络请求、调用GPU接口等。有了安全沙箱,就可以将操作系统和渲染进程进行隔离,这样即便渲染进程由于漏洞被攻击,也不会影响到操作系统的。由于渲染进程采用了安全沙箱,所以在渲染进程内部不能与操作系统直接交互,于是就在浏览器内核中实现了持久存储、网络访问和用户交互等一系列与操作系统交互的功能,然后通过IPC和渲染进程进行交互。

阅读量:1941

点赞量:0

收藏量:0