(一)什么是XSS漏洞?
cross sitescript跨站脚本攻击,为了避免和css重复,就叫XSS了,是客户端脚本安全中的头号大敌。
(二)XSS有哪些类型?
反射型:简单的描述就是把用户输入的数据反射给浏览器,这个数据可能是Html代码或者js代码,反射后让浏览器去执行。
存储型:把用户输入的数据(比如恶意的js代码)存储在服务器端,具有很强的稳定性,危害时间长。
DOM Based XSS:这种不是按照存储在哪里来划分的,可以说是反射型,由于历史原因,归为一类,通过改变DOM结构形成的XSS称之为DOM Based。
(三)XSS的危害有哪些?
1、劫持Cookie,cookie中一般加密保存了用户的登录凭证,浏览器发起的所有请求都会自动带上,如果Cookie被盗取,也就是说用户不用通过密码而直接登录你的账户。
Cookie设置HttpOnly属性,能够起到四两拨千金的作用,另外cookie可以绑定用户客户端信息,例如ip或者umid信息。
2、构建Get和Post请求,如果cookie按照上述进行了设置,则无法直接劫持cookie来使用了,但是XSS可以在javascript中构建get或者post请求,来实现自己的攻击。
例如下面的一段代码:
var img =document.createElement(‘img’);
img.src=”http://blog.cccc.com?m=delete&id=212112”;
document.body.appendChild(img);
只要让用户执行这段脚本,就能发起get请求,攻击者通过XSS诱导用户来执行。
XSS的攻击过程都是在浏览器通过执行javascript脚本自动进行,缺少与用户交互的过程。例如在POST的请求中,如果需要输入验证码,Js代码无法解析验证码,攻击也就无法实现。但是针对验证码这种情况,如果XSS可以通过把验证码的图片发到远端攻击服务器,服务器解析验证码然后把结果返回给js代码,js获取后继续进行攻击,不过就是成本有点高。
3、XSS钓鱼
上面模拟用户的POST请求貌似成本有点高,攻击者可以将XSS和钓鱼结合在一起,例如通过javascript代码模拟出网站的登录框,用户输入用户名和密码后,XSS将这些信息发送到服务器端,用来进行攻击。
4、获取用户系统信息
此外XSS还可以识别用户的浏览器信息、用户安装的软件以及用户真实的IP等信息。
5、XSS Wrom
这是XSS的一种终极利用方式,破坏力和影响力是巨大的,一般来说,用户直接发生交互行为的页面,如果存在存储型XSS,则比较容易发起Wrom攻击。
(四)如何防御XSS呢?
1、给关键的Cookie设置HttpOnly属性
这样能够避免js读取Cookie信息(设置后有助于缓解XSS,但是XSS除了劫持Cookie之外,还可以模拟用户的身份进行操作)。
2、进行输入检查
如果仅仅在客户端通过JS来做输入校验,有可能会被攻击者绕过,WEB开发中的普遍做法是同时在客户端和服务端做校验。这种输入检查的方式也称之为XSS Filter。
3、输出检查
一般说来,除了富文本输出之外,在变量输出到HTML页面时,可以使用编码或者转义的方式来防御XSS攻击。
4、防御DOM BasedXSS
前面提到的集中方法,对于这种类型不太适用,需要特别对待,那如何才能防御呢?
首先是$var输出到