本
文
摘
要
跨站脚本漏洞(Cross-site scripting,通常简称为XSS)发生在客户端,可被用于进行窃取隐私、钓鱼欺骗、窃取密码、传播恶意代码等攻击。
XSS攻击使用到的技术主要为HTML和Javascript,也包括VBScript和ActionScript等。XSS攻击对WEB服务器虽无直接危害,但是它借助网站进行传播,使网站的使用用户受到攻击,导致网站用户帐号被窃取,从而对网站也产生了较严重的危害。
XSS类型包括:
1、反射型跨站:是目前最普遍的跨站类型。跨站代码一般存在于链接中,请求这样的链接时,跨站代码经过服务端反射回来,这类跨站的代码不存储到服务端(比如数据库中)。例如连接:
http://127.0.0.1:8000/DVWA/vulnerabilities/xss_r/?name=<script>alert(5555);</script>,用户提交的name参数值为“<script>alert(5555);</script>”,它是一段简单的Javascript代码,结果就是弹出一个内容为“5555”的弹窗(图中的连接部分字符被转码),如下图:反射型XSS弹窗
2、存储型跨站:这是危害最直接的跨站类型,跨站代码存储于服务端(比如数据库中)。常见情况是某用户在论坛发贴,如果论坛没有过滤用户输入的Javascript代码数据,就会导致其他浏览此贴的用户的浏览器会执行发贴人所嵌入的Javascript代码。例如下图:输入mame为存储型,内容为“<script>alert(5555);</script>”的帖子
存储型XSS
点击确认,也会出现内容为“5555”的弹窗,但是它和反射型跨站不同的是“<script>alert(5555);</script>”已经存入到后台数据库中,当我们再点击上图左侧XSS(stored)时依然会出现下图所示的弹窗,可以看到下图浏览器地址栏里没有“name=<script>alert(5555);</script>”参数。
存储型XSS弹窗
3、DOM跨站(DOM XSS):是一种发生在客户端DOM(Document Object Model文档对象模型)中的跨站漏洞,很大原因是因为客户端脚本处理逻辑导致的安全问题。这个情况比较多,我们可以在打开浏览器网页时按“F12”,如下图
网页源码
理论上那些有交互的HTML标签都可能存在DOM型跨站。
以上是为了验证XSS漏洞存在,使用了比较简单的代码,如果换成获取cookies信息的代码,或者是做成非常有吸引力的弹窗,就会诱导用户点击,从而掉入攻击者的陷阱。
常用的防止XSS漏洞技术包括:
1、与SQL注入防护的建议一样,假定所有输入都是可疑的,必须对所有输入中的script、iframe等字样进行严格的检查。这里的输入不仅仅是用户可以直接交互的输入接口,也包括HTTP请求中的Cookie中的变量,HTTP请求头部中的变量等。
2、不仅要验证数据的类型,还要验证其格式、长度、范围和内容。
3、不要仅仅在客户端做数据的验证与过滤,关键的过滤步骤在服务端进行。
4、对输出的数据也要检查,数据库里的值有可能会在一个大网站的多处都有输出,即使在输入做了编码等操作,在各处的输出点时也要进行安全检查。
5、在发布应用程序之前测试所有已知的威胁。
没有网络安全,就没有国家安全。