XSS漏洞是网站漏洞中最容易出现的一种,至少现在的各大网站中基本都存在,传闻只有gmail是唯一一个完全不存在的,或者说攻击者没找出漏洞的,也许是因为XSS漏洞看起来危害并不是那么的大吧,所以基本上没有得到过太大的重视,从而也就造成了这么多的网站存在着一些很简单就能发现的XSS漏洞,在这篇blog中以我这个网站安全的外行人的角度来侃侃XSS漏洞攻击以及防范的措施。
XSS漏洞的出现简单来说,就是让不支持富文本的区域支持了富文本的执行,例如blog的标题是不支持富文本的,但由于页面显示时没去做处理,导致了可以在标题中嵌入像文本加粗、变颜色等等的普通HTML,当然,攻击者也就可以嵌入恶意的javascript了,例如获取你在当前网站的cookie 的javascript:document.cookie等等,另外一种就是支持富文本的区域没有去过滤一些恶意的javascript,例如blog的文章内容中内嵌获取cookie等恶意的javascript代码,这两类现象太多了,反倒是富文本的区域会好一些,例如多数论坛采用的UBB等等,而且对于富文本,大家都会比较重视,但反而是非富文本区域,很容易忽略其会产生XSS漏洞。
上面说的好像有些太抽象了,举个例子来说吧,例如blog的标题,假设在存到数据库的时候是直接将blog标题文本框中的内容存储,在显示的时候直接用$blog.title这样的方式去显示的话,那么只要在blog标题中输入 ,然后保存,在显示的时候这段 javascript就会被正常执行了,虽然这样的看似没有什么大的危害,但攻击者同样不会采取这么简单的方式,例如可以直接给你一段经过url编码的串,而其中就是利用网站的XSS漏洞将你的cookie信息发送至一个攻击性质的记录cookie的网站等,又或者完全可以利用网站的XSS漏洞埋上一段隐藏的img来嵌入这样而已的url,那么你的cookie就会不知不觉的被盗用,而偏偏现在大部分的网站都是借助cookie来代表用户的身份,这样,当攻击者拿到cookie之后,也就可以假冒你的身份大摇大摆的进入相应的网站了。
上面说的是比较典型的一种XSS漏洞产生的情况,另外一种比较典型的是domxss的情况,这种情况多数是攻击者利用直接闭合标签,从而执行恶意的 javascript代码,例如页面中有个文本框,这个文本框的内容在提交后会被记录并继续显示在结果页面的文本框架中,假设第二个页面中文本框是这么写的:,那么只要在前一页面中输入">& lt;script>alert(document.cookie);这样的内容,在第二个页面显示的时候就会变成: