前言

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的,可以采用以下的方法进行过滤:
  1. htmlspecialchars函数

  2. htmlentities函数

  3. HTMLPurifier.auto.php插件

  4. RemoveXss函数(百度可以查到)

  • PHP输出到JS代码中,或者开发Json API的,则需要前端在JS中进行过滤:
  1. 尽量使用innerText(IE)和textContent(Firefox),也就是jQuery的text()来输出文本内容

  2. 必须要用innerHTML等等函数,则需要做类似php的htmlspecialchars的过滤(参照@eechen的答案)

  • 其它的通用的补充性防御手段
  1. 在输出html时,加上Content Security Policy的Http Header
    (作用:可以防止页面被XSS攻击时,嵌入第三方的脚本文件等)
    (缺陷:IE或低版本的浏览器可能不支持)

  2. 在设置Cookie时,加上HttpOnly参数
    (作用:可以防止页面被XSS攻击时,Cookie信息被盗取,可兼容至IE6)
    (缺陷:网站本身的JS代码也无法操作Cookie,而且作用有限,只能保证Cookie的安全)

  3. 在开发API时,检验请求的Referer参数
    (作用:可以在一定程度上防止CSRF攻击)
    (缺陷:IE或低版本的浏览器中,Referer参数可以被伪造)

这是对网上一篇文章的转载,原文地址:https://segmentfault.com/q/1010000004067521

XSS绕过

绕过的方法总结起来有个几种类型。

  1. 大小写绕过(利用了正则的完全匹配)

  2. 编码绕过

  3. 闭合标签等

下面给大家一个绕过总结的很好的网页,有兴趣的可以去看看

XSS绕过文章地址:http://blog.csdn.net/qq_29277155/article/details/51320064