前言
XSS~TOP10大漏洞常驻成员,危害有多大我就不必多加强调了。
既然这么大的危害,那我们做个一个新世纪的少年肯定要对其有所了解。
什么是XSS
借用百度百科上的解释
XSS~跨站脚本攻击(Cross Site Scripting),为不和层叠样式表(Cascading Style Sheets, CSS)的缩写混淆,故将跨站脚本攻击缩写为XSS。恶意攻击者往Web页面里插入恶意Script代码,当用户浏览该页之时,嵌入其中Web里面的Script代码会被执行,从而达到恶意攻击用户的目的。
自己对其的理解:就是往WEB网页中写入JS语言,从而利用JS来达到自己的目的。当浏览器解析HTML代码的时候,是不会自己识别里面的内容是好还是坏的,所以当我们绕过了WEB端的防御,就可以成为一个XSS漏洞。
XSS漏洞分为几种
XSS漏洞分为三种,分别为:
1:反射型
输入的数据 -> 经过后端 -> 返回到浏览器 -> 浏览器解析
缺点就是利用较为困难,但还是可以用来钓鱼等利用的。
2:存储型
输入的数据 -> 经过后端 -> 存储到数据库 -> 返回到浏览器-》浏览器解析
博客上面的留言就是存储型,每当我们打开一个留言板的时候,都可以看到一些人写的留言,这些留言是存储到数据库一直存在的。
3:基于DOM类型(Document Object Model,文档对象模型)
客户端的脚本程序可以通过DOM来动态修改页面内容,从客户端获取DOM中的数据并在本地执行。基于这个特性,就可以利用JS脚本来实现XSS漏洞的利用。
XSS能用来干什么
就这样说吧,JS能做的XSS都能做。
最老生常谈的,莫过于盗取COOKIE,当然在如今HTTP ONLY的时代盗取COOKIE也只能在一些小站点上使用了。
XSS是很强大的,下面列出一些XSS能做什么:
1:DDOS(分布式拒绝服务攻击指借助于客户/服务器技术,将多个计算机联合起来作为攻击平台,对一个或多个目标发动DDoS攻击,从而成倍地提高拒绝服务攻击的威力。)
2:XSS钓鱼
3:获取用户系统信息
4:XSS Worm
等等 上面也说过,JS能做的,XSS都可以做。
XSS防御
上面,我们已经对XSS有了一个初步的了解,下面将要对XSS的绕过与防御来叙说一下。
既然有XSS这门攻击方法,那么防御也是必然的。
在XSS的防御中,就是对输入过滤,对输出也同样过滤
那么有下面的一些方法
- PHP直接输出html的,可以采用以下的方法进行过滤:
htmlspecialchars函数
htmlentities函数
HTMLPurifier.auto.php插件
RemoveXss函数(百度可以查到)
- PHP输出到JS代码中,或者开发Json API的,则需要前端在JS中进行过滤:
尽量使用innerText(IE)和textContent(Firefox),也就是jQuery的text()来输出文本内容
必须要用innerHTML等等函数,则需要做类似php的htmlspecialchars的过滤(参照@eechen的答案)
- 其它的通用的补充性防御手段
在输出html时,加上Content Security Policy的Http Header
(作用:可以防止页面被XSS攻击时,嵌入第三方的脚本文件等)
(缺陷:IE或低版本的浏览器可能不支持)在设置Cookie时,加上HttpOnly参数
(作用:可以防止页面被XSS攻击时,Cookie信息被盗取,可兼容至IE6)
(缺陷:网站本身的JS代码也无法操作Cookie,而且作用有限,只能保证Cookie的安全)在开发API时,检验请求的Referer参数
(作用:可以在一定程度上防止CSRF攻击)
(缺陷:IE或低版本的浏览器中,Referer参数可以被伪造)
这是对网上一篇文章的转载,原文地址:https://segmentfault.com/q/1010000004067521
XSS绕过
绕过的方法总结起来有个几种类型。
大小写绕过(利用了正则的完全匹配)
编码绕过
闭合标签等
下面给大家一个绕过总结的很好的网页,有兴趣的可以去看看
XSS绕过文章地址:http://blog.csdn.net/qq_29277155/article/details/51320064