XSS攻击---不得不防的网站安全漏洞

日常vlog。
近期公司参与了一次网络安全大检查。手上有个项目被检测出存在XSS攻击漏洞,解决漏洞的同时,借此机会分享一下关于XSS攻击的一些学习总结。

一、是什么

XSS攻击,也叫跨站脚本攻击,通常是利用网页开发时留下的漏洞,通过巧妙的方法注入恶意指令代码到网页。这些恶意网页程序通常是JavaScript。攻击成功后,攻击者也有可能得到更高的权限、私密网页内容、会话和cookie等,危害极大。

二、什么原理

HTML是一种超文本标记语言,通过将一些字符特殊地对待来区别文本和标记,例如,小于符号(<)被看作是HTML标签的开始,之间的字符是页面的标题等等。当动态页面中插入的内容含有这些特殊字符(如<)时,用户浏览器会将其误认为是插入了HTML标签,当这些HTML标签引入了一段JavaScript脚本时,这些脚本程序就将会在用户浏览器中执行。所以,当这些特殊字符不能被动态页面检查或检查出现失误时,就将会产生XSS漏洞。

三、有哪些类型

XSS根据其特性和利用手法的不同,主要分成两大类型:

1、反射型XSS

反射型跨站脚本(Reflected Cross-site Scripting)也称作非持久型、参数型跨站脚本。这种类型的跨站脚本是最常见,也是使用最广的一种,主要用于将恶意脚本附加到URL地址的参数中,例如:

http://www.test.com/search.php?key="><script>alert("XSS")</script>
http://www.test.com/help.shtml?query=%3Cscript%3Ealert%281%29%3C/script%3E
http://www.test.com/logout.asp?out=1&url=javascript:alert(document.cookie)

反射型XSS的利用一般是攻击者通过特定手法(比如利用电子邮件),诱使用户去访问一个包含恶意代码的URL,当受害者单击这些专门设计的链接的时候,恶意JavaScript代码会直接在受害者主机上的浏览器执行。它的特点是只在用户单击时触发,而且只执行一次,非持久化,所以称为反射型跨站式脚本。

在这里插入图片描述
图源:XSS跨站脚本攻击剖析与防御(邱永华著)

2、持久型XSS

持久型跨站脚本(Persistent Cross-site Scripting)也等于存储型跨站脚本(Stored Cross-site Scripting),比反射型跨站脚本更具威胁性,并且可能影响到Web服务器自身的安全。此类XSS不需要用户单击特定URL就能执行跨站脚本,攻击者事先将恶意JavaScript代码上传或存储到漏洞服务器中,只要受害者浏览包含此恶意JavaScript代码的页面就会执行恶意代码。
在这里插入图片描述

图源:XSS跨站脚本攻击剖析与防御(邱永华著)

四、有哪些危害

1、网络钓鱼,包括盗取各类用户账号;
2、窃取用户cookies资料,从而获取用户隐私信息,或利用用户身份进一步对网站执行操作;
3、劫持用户(浏览器)会话,从而执行任意操作,例如进行非法转账、强制发表日志、发送电子邮件等;
4、强制弹出广告页面、刷流量等;
5、网页挂马;
6、进行恶意操作,例如任意篡改页面信息、删除文章等;
7、进行大量的客户端攻击,如DDoS攻击;
8、获取客户端信息,例如用户的浏览历史、真实IP、开放端口等;
9、控制受害者机器向其他网站发起攻击;
10、结合其他漏洞,如CSRF漏洞,实施进一步作恶;
11、提升用户权限,包括进一步渗透网站;
12、传播跨站脚本蠕虫等。

五、如何防御

1、 使用 XSS Filter

XSS Filter的作用是过滤用户(客户端)提交的有害信息,从而达到防范XSS攻击的效果。XSS Filter作为防御跨站攻击的主要手段之一,已经广泛应用在各类Web系统之中,包括现今的许多应用软件,例如 IE 8浏览器,通过加入XSS Filter功能可以有效防范所有非持久型的XSS攻击。
在这里插入图片描述
图源:XSS跨站脚本攻击剖析与防御(邱永华著)

2、Web安全编码规范

在安全领域,有一条黄金法则:“一切输入都是有害的”。即便是这样,因为业务需求,不可能完全过滤用户输入的某些内容,比较可行的解决方案就是在服务端进行 Web 安全编码,让有害的数据变成无害。
在输出数据前对潜在威胁的字符进行编码、转义,是防御XSS攻击的有效措施。

3、防御DOM-Based XSS

DOM型的XSS主要是由客户端的脚本通过DOM动态地输出数据到页面中,它不依赖于提交数据到服务器端,而从客户端获得DOM中的数据在本地执行。由于被处理的数据不在服务器的直接控制范围内,所以仅从服务器端部署防御措施是无法解决问题的。
防范基于DOM的XSS攻击要注意两点。
(1) 避免客户端文档重写、重定向或其他敏感操作,同时避免使用客户端数据,这些操作尽量在服务端使用动态页面来实现。
(2)分析和强化客户端JavaScript代码,尤其是一些受到用户影响的Dom对象。

4、其他防御措施

还有很多防御措施这里不一一列举。最重要一点还是在于我们平时编码要有一种危机感,不安全感。对自己的代码多持一些怀疑态度,不仅仅是考虑到功能实现了就万事大吉了。

关注 @程序喵子好东西与大家共同分享,共同进步!

更多精彩推荐:

软考系列
操作系统
Java编程系列
面试系列
实用工具系列

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值