黑客必修:WEB安全—XSS的原理与防范实例讲解

生活中我们经常会碰到空间领红包“中毒”自动发不良信息的现象,或者是不知不觉的被人盗取了信息的情况。通常这种情况都是XSS漏洞导致的,我们今天就来讲解一下关于XSS漏洞的原理。

黑客必修:WEB安全—XSS的原理与防范实例讲解

XSS种类:

反射型

存储型

Dom-based型

这里面反射型跟持久型都是很常见的,也是用的最广泛的一种攻击方式。

它的主要利用原理是:

给受害者发送带有恶意代码或脚本的链接,如果你点击了链接,只要是被HTML所解析并且执行了,那无论你是否快速关闭了点开的页面,都白瞎了。

Dom这种XSS漏洞是基于文档对象模型的一种漏洞,它的特点是通过url传入参数去控制触发的。

下面我们主要来说一下反射型跟存储型XSS的原理,并附上代码。

黑客必修:WEB安全—XSS的原理与防范实例讲解

反射型XSS:

我们平时常见XSS地方很多都是搜索框(一般网站上都会有搜索文章什么的),我们可以在这种搜索框里面输入:

<script>alert('XSS')</script>

来验证XSS的漏洞存在与否,如果存在会弹出一个编辑框“XSS”,下面我们自己构建一个这样的搜索框:

先新搭建好PHP环境,在站点新建一个xss.php文件,输入以下的代码。

黑客必修:WEB安全—XSS的原理与防范实例讲解

代码的意思很简单:

  1. 先创建一个form表单,提交方式设置为GET,提交给本页面(也就是交给下面的PHP代码去执行)
  2. 定义一个$xss变量
  3. 如果变量不为空的话,输出$xss的内容。

然后在浏览器上访问的效果应该是这样的:

黑客必修:WEB安全—XSS的原理与防范实例讲解

这个时候我们就可以输入常规的信息去搜索,输入“im liuse”显示效果如下:

黑客必修:WEB安全—XSS的原理与防范实例讲解

现在我们改变策略,输入我们上面说的xss测试代码<script>alert('XSS')</script>然后执行,你会看到下图的效果:

黑客必修:WEB安全—XSS的原理与防范实例讲解

事实证明,没有进行过滤,如果我们把这个地方的<script>alert('XSS')</script>改成其它的代码,如:

<script>alert(document.cookie)</script>

就可以获取用户的cookie(cookie记录了用户的登录信息),拿到cookie有什么用呢?

举个例子,比如说拿到你的QQ空间的cookie就可以不需要用户名密码登录你的空间,我们经常见到空间好友自动转发一些乱七八糟的东西的图片文字的,基本都是通过xss漏洞搞的。

说完反射型XSS我们再来说说存储型XSS。

黑客必修:WEB安全—XSS的原理与防范实例讲解

存储型XSS:

相对于反射型XSS,存储型XSS的档次确实高了不少,不过利用难度也相对提高了。

什么是存储型XSS呢?没错就跟它的名字一样,是可以储存起恶意代码的方式。这种漏洞利用多出现在论坛评论,后台上传这些地方,可以是图片也可以是文字。相对于反射型XSS不同的是,存储型XSS可以保存在服务器端(存到数据库)下面我们用代码举例:

我们在上面的xss.php文件的基础上修改一下:

黑客必修:WEB安全—XSS的原理与防范实例讲解

同样的代码还是很容易理解:

  1. 先通过mysql_connect()函数来连接mysql
  2. 然后自己在mysql中建一个XSS_test数据库
  3. 创建一个XssValue字段来收录一会提交进的恶意代码
  4. 如果有数据过来,保存到数据库。

下面,我们来实验一下。

在搜索框同样输入我们的XSS代码:

你会发现貌似前台没有显示,但去mysql数据库看已经存储到数据库了,以后任何人去访问某个调用这个数据库的页面都会受影响!

黑客必修:WEB安全—XSS的原理与防范实例讲解

以上就是简单的演示说明,下面我们讲讲防范过滤。

过滤实现:

重点对象:

<>(尖括号)、”(引号)、 ‘(单引号)、%(百分比符号)、;(分号)、()(括号)、&(& 符号)、+(加号)

过滤函数:

(1)htmlspecialchars() 函数,用于转义处理在页面上显示的文本。

(2)htmlentities() 函数,用于转义处理在页面上显示的文本。

(3)strip_tags() 函数,过滤掉输入、输出里面的恶意标签。

(4)header() 函数,使用header("Content-type:application/json"); 用于控制 json 数据的头部,不用于浏览。

(5)urlencode() 函数,用于输出处理字符型参数带入页面链接中。

(6)intval() 函数用于处理数值型参数输出页面中。

好,今天XSS就先介绍到这里了,希望各位一定要认识到网安的重要性!

相关推荐