xss攻击

时间 : 17-11-05 评论 : 0 点击 : 169 次

一、XSS攻击是什么

XSS攻击全称跨站脚本攻击,英文全称是Cross Site Script。XSS是一种在web应用中的计算机安全漏洞,它允许恶意web用户将代码植入到提供给其它用户使用的页面中,通过恶意代码实现盗取cookie、伪造用户身份操作用户数据等恶意攻击。是客户端脚本安全中的头号大敌。XSS攻击可产生巨大的破坏力,且产生的场景比较复杂,防范难度较高。

XSS攻击其实跟跨站并没有直接关系,不一定要跨站实现,之所以叫跨站脚本攻击,是因为早期的XSS演示案例都是跨站的,一直沿用了跨站的说法。

二、XSS的分类

1、反射型XSS

反射型XSS是指恶意用户构造恶意URL,URL参数中包含恶意攻击参数,通过诱导用户点击恶意URL实现攻击。也叫做非持久型XSS。

2、存储型XSS

存储型XSS把用户输入的攻击代码存储在服务器,后续有用户打开包含了攻击代码的页面,就会受到攻击。这种攻击方式不需要构造特殊的URL,用户通过正常途径打开相应页面就会受到工具,这种XSS攻击具有很强的稳定性。比如在博客文章中输入了一段可执行攻击代码,如果服务器端和前端没有做足够的安全过滤,导致攻击代码被执行,每次有用户访问这篇文章的时候就会被XSS攻击。

3、Dom Based XSS

前面两种类型已经可以概括所有XSS,Dom Based XSS之所以单独拎出来作为一种独立的类型,是因为这种类型的XSS攻击比常规的XSS攻击防范多了一道流程,单独拎出来可以提醒码农遇到这种场景特别注意。这种XSS的形成是通过修改页面Dom节点形成XSS,通常是将包含恶意代码的数据输出到HTML代码中作为一个JS变量,正常的JS业务逻辑再将这个JS变量通过document.wirte、innerHTML等方式写入Dom节点中。即使服务器端输出JS变量的时候进行了转码等安全防范,但由于赋值给JS变量时,浏览器自动进行了一次反向转码,如果将JS变量之间写入Dom节点,还是会造成XSS攻击,因此写入Dom节点前还需要进行一次转码,这就是多出来的一道流程。

三、XSS攻击的危害举例

1、盗取cookie

恶意攻击代码通过document.cookie获取到用户cookie,然后动态创建一个请求,将cookie发到黑客服务器。浏览器通常是用cookie来维持用户登录态、识别用户身份。盗取到cookie之后,就可以伪造用户身份。比如腾讯使用uin和skey这两个cookie维持用户登录态,获取到这两个cookie之后,就可以在腾讯很多业务的页面上伪造用户身份,执行只有用户本人才能做的操作。

2、操作用户数据

盗取到用户cookie之后,可以模拟用户身份操作用户数据。不盗取cookie,直接在被攻击页面发起cgi请求,也可以删除用户数据、增加或者修改用户数据,比如发表恶意文章。

3、钓鱼

成功注入恶意攻击代码之后,可以通过js改变页面外观和逻辑,比如伪造登录框收集用户密码。

4、蠕虫攻击

比如在微博中插入恶意攻击代码,令所有查看该微博的人中招,受到xss攻击,自动发表一篇包含恶意攻击代码的微博,导致更多的人受到xss攻击。

四、XSS攻击防范

1、输入输出检查与转码

对用户输入的内容坚持不可信原则,所有内容均要经过检查和处理。

1)、对于有明确定义和字符范围限制的数据,进行强制校验。比如对于整型类型的数据如手机号码等,强制转为整型,对于jsonp协议中的callback函数名称强制检查是否只包含英文、下划线和数字。

2)、对于允许的字符范围比较宽泛的纯文本数据,过滤特殊标签,转码特殊字符。比如过滤script、img、iframe、base标签,转码特殊字符:<>'"&/,将他们转为html实体,在php中,可以用htmlspecialchars 或者htmlentities 对特殊字符转成html实体。

3)、如果可以,限制输入字符的长度,可以在被绕过xss过滤后,限制恶意用户的发挥空间

4)、如果允许输入富文本,对允许的html标签做白名单检查

5)、如果存在document.write等可能导致dom-base的操作,在js操作之前用js再次对特殊字符进行转义

2、被攻击后防止造成重大损失

xss攻击的一个重要应用场景是盗取cookie。对cookie设置httponly,不允许js获取重要cookie,即使xss过滤被绕过,恶意用户也拿不到cookie

 

安全

xss攻击:等您坐沙发呢!

发表评论