这节主要讲述XSS的基本概念和攻击原理。
一 XSS基本概念
人们经常将跨站脚本攻击(Cross Site Scripting)缩写为CSS,但这会与层叠样式表(Cascading Style Sheets,CSS)的缩写混淆。因此,有人将跨站脚本攻击缩写为XSS。
跨站脚本攻击(XSS),是最普遍的Web应用安全漏洞。这类漏洞能够使得攻击者嵌入恶意脚本代码到正常用户会访问到的页面中,当正常用户访问该页面时,则可导致嵌入的恶意脚本代码的执行,从而达到恶意攻击用户的目的。
二 攻击原理
XSS的形成根因在于攻击者精心构造的非法输入在受害者浏览器处解析为代码,被浏览器执行,从而造成损害。如果网站使用MVC架构,那么XSS就发生在View层,在应用拼接变量到HTML页面时发生。
根据攻击方式不同,XSS又分为反射型XSS、存储型XSS和基于Dom的XSS,三种类型。
2.1 反射型XSS
反射型XSS,也叫非持久型XSS。攻击者构造一个包含脚本的URL,并让正常用户打开这个url,这样XSS代码出现在请求URL中,作为参数提交到服务器,服务器对参数没有进行XSS相关处理,直接解析并响应。响应结果中包含XSS代码,最后浏览器解析并执行。
攻击过程中恶意数据被服务器“反弹”给用户的浏览器,故称为反射型XSS。
特点:反射型XSS主要服务端没有对外来数据进行XSS处理,就直接发送给浏览器,导致出现XSS攻击。
实例:
A是攻击者,B是被攻击者,X是网站
1)A构造了一个包含恶意脚本参数的url,这个url的域名是X网站;
例如:http://x.com/?name=<script>alert("hey!");</script>
说明:上边构造的name参数,值是一个脚本,这个脚本里的JavaScript代码很有可能会执行一些有危害的操作,例如:自动购买、删除等恶意操作。
2)A将这个URL通过各种方式发送给B,B点击这个链接;
3)X网站后台将对应链接内容参数解析,并将name参数值当做页面内容直接返回给B的浏览器;
注意:这里X网站后台没有对name参数进行XSS处理。
4)B的浏览器中直接执行A构造的脚本,导致攻击成功。
注意:这种url中构造的脚本参数,chrome浏览器做了安全防护,是无法执行的,而firefox是可以执行的。
黑客往往通过电子邮箱等方式诱惑用户点击某个恶意链接,才能攻击成功。这种情况下,受害者相对较少。
2.2 存储型XSS
存储型XSS,也叫持久型XSS,主要是将XSS代码发送到服务器(不管是数据库、内存还是文件系统等),然后在下次请求页面的时候,服务器从数据库中读取数据,没有做XSS相关处理,直接输出给浏览器,导致攻击代码被执行。
实例:
最典型的就是留言板XSS。用户提交了一条包含XSS代码的留言到数据库。当目标用户查询留言时,那些留言的内容会从服务器解析之后加载出来。浏览器发现有XSS代码,就当做正常的HTML和JS解析执行。XSS攻击就发生了。
2.3 基于DOM的XSS
这种情况不依赖于是否将恶意程序放置于服务器,而是修改页面的DOM节点,效果上说也属于反射型XSS。例如,攻击者输入恶意字符串,构建出带有恶意程序的html页面,然后诱导用户点击,点击后,将造成xss攻击。
三 XSS的根因
XSS之所以会发生,就是由于在输出不可信数据到浏览器的时候,没有对数据中潜藏的可执行代码做处理,导致代码被浏览器执行。
四 参考资料
https://www.cnblogs.com/mao2080/p/9460397.html
https://baike.baidu.com/item/XSS攻击/954065?fr=aladdin