XSS漏洞检测的研究与设计

2018-03-19 16:26刘伟明曾泽宇刘帅张瑞霞
电脑知识与技术 2018年4期

刘伟明+曾泽宇+刘帅+张瑞霞

摘要:该系统设计实现了一个XSS测试用例模型,通过网络爬虫对网站进行链接爬取,并根据设计的测试用例模型生成测试用例集合,将测试用例集合提交至网站,监测网站是否具有XSS漏洞。系统的爬虫模块采用基于广度优先搜索策略的多线程技术,爬虫配置功能能够使用户自定义多个配置爬虫的参数。经过测试用例检测后,系统能高效准确地发现XSS漏洞。

关键词:Web;XSS检测;用例模型;Python

中图分类号:TP393 文献标识码:A 文章编号:1009-3044(2018)04-0014-02

1 背景

在互联网技术飞速发展的今天,人们已经越来越多的依赖互联网。互联网固然丰富了人们的生活,但是其存在的安全问题也给人们带来了很多危害。在众多的网络安全问题中,针对Web应用程序的攻击已经成为网络攻防的热点,而在Web攻击中,XSS攻击是其中一中十分流行和影响严重的攻击。利用XSS攻击,攻击者可以获取用户隐私,盗取用户身份Cookie,劫持用户的浏览器等,危害十分严重,给用户带来了严重的生活困扰,给企业带来了巨大的经济损失。因此,如何检测XSS漏洞,保障Web应用程序免受XSS攻击已经成为一个十分有必要的研究课题。本系统以此为目标,针对XSS漏洞检测,对其测试用例进行了深入的研究,设计了一个以攻击位置的不同来进行分类的测试用例模型。

2 系统的设计

系统主要分为两大模块:网络爬虫模块和XSS检测模块。如图1所示。 网络爬虫模块主要功能是对Web页面源代码的爬取,完成网页源代码的下载并提取其中的URL链接和解析出表单,为XSS检测模块提供需要测试的URL链接和表单。XSS检测模块的主要功能是从网络爬虫模块中获取元组forms中的表单,提取出表单中URL的各参数,将XSS测试用例插入到URL的参数中,组成一个新的待测试的URL,并访问此URL。检测返回的页面源代码中是否存在提交的XSS测试用例,如果存在则表示该URL存在XSS漏洞,否则不存在XSS漏洞。

1) 网络爬虫模块

网络爬虫模块主要是由三个子模块组成,分别是配置模块、下载模块和解析模块。初始状态下,配置模块根据用户提供的参数对爬虫进行配置,并且此时带爬取的URL列表中只有一个入口URL,此时通过调用下载模块来下载网页源代码,接着调用解析模块对下载的网页源代码进行解析,解析出URL链接和表单,并将解析出的URL链接加入到待爬取的列表中。

如图2所示。

2) XSS检测模块

XSS检测模块主要是由两个子模块组成,分别是测试用例生成模块和检测模块。初始状态下,检测模块提取全局元组中的表单,根据表单中的提交方式去调用不同的检测模块(检测模块有两个:GET检测模块和POST检测模块)。检测子模块获取表单,提取出表单中的提交URL地址并传递给测试用例生成模块,此时测试用例生成模块根据表单中的提交URL地址去生成攻击测试用例,并将生成的攻击测试用例传递给检测模块,检测模块此时开始利用攻击测试用例检测URL链接所在的网页页面是否存在XSS漏洞,若发现XSS漏洞,则提醒用户并输出相关XSS漏洞信息。如图所示。

(1) 测试用例生成模块:测试用例生成模块为用户提供了两种选择,一种是用户自定义提交的攻击测试用例,另一种是使用模块中自带的默认的攻击测试用例。首先启动配置子模块,用户在自定义测试用例的窗口导入自定义的测试用例或选择使用默认配置,导入的内容将会替换模块中默认的测试用例,形成新的测试用例。默认的测试用例主要由六类,分别是属性类、标签类、标签分割类、XSF类、CSS类和mXSS类,这六类是根据攻击位置的不同来划分的,在本文的第三部分已经有介绍。默认情况下,每一类测试用例集合中都有十个攻击测试用例,所以所有测试用例加起来一共有六十个,当然,这只是众多XSS攻击测试用例中的冰山一角。由用户自定义测试用例或使用默认测试用例之后,将会启动生成子模块,该模块根据URL网址的不同类别,选择相应类别的攻击测试用例,添加到最终的测试用例集合中。

(2) XSS检测模块:XSS检测模块从headers生成模块获取headers信息,从URL生成模块获取URL链接,根据表单的提交方式的不同从而生成新的网络请求包,紧接着启动下载模块,利用download()函数下载当前待测试的URL链接的网页页面。检测模块由四个子模块组成,分别是headers生成模块、URL生成模块、XSS检测模块和输出模块。

headers生成模块:headers生成模块为用户提供了两种选择,用户可以自定义headers的内容,也可以使用模块中默认的headers,headers是一个元组,headers的代码格式为{name: value},但是在用户输入的窗口界面,用户只需要输入name和value即可。生成的headers信息将会传递到XSS检测模块中。

URL生成模块:URL生成模块是检测模块中的一个重要模块,该模块需要将攻击测试用例插入到URL的各个参数中,形成新的待测试的URL链接。

XSS检测模块:XSS检测模块从headers生成模块获取headers信息,从URL生成模块获取URL链接,根据表单的提交方式的不同从而生成新的网络请求包,紧接着启动下载模块,利用download()函数下载当前待测试的URL链接的网页页面。

输出模块:输出模块主要负责输出XSS漏洞信息。该模块接收来自XSS检测模块的XSS漏洞信息,一旦接收到XSS漏洞信息,直接发出提示音,提醒用户发现XSS漏洞,并且在程序界面窗口打印出相关XSS漏洞信息。

3 测试

在测试过程中,系统右下角的攻击用例模型会实时高亮当前提交的测试用例所属类型,如图4所示,当前提交的测试用例所属类型是属性截断,在界面上显示是属性截断的按钮字体变红且凹陷下去,在下方用蓝色字体显示出当前提交的具体测试用例。系统包含了attr测试、tag测试、tag-split测试、css测试、xsf测试和mxss测试。

4 总结

本系统首先建立XSS攻击用例模型,设计实现了一个高效的多线程网络爬虫和XSS检测模块,利用网络爬虫爬取网站的URL链接和表单,并根据XSS攻击用例模型生成测试用例,利用XSS检测模块向网站提交测试用例,以检测网站是否存在XSS漏洞。

本系统的网络爬虫模块和XSS检测模块中均使用了多线程技术,大大提高了检测效率。网络爬虫模块将解析到的网站链接以树状图的形式在程序界面显示出来,用户可以直观的查看该网站的整体结构。系统实现了数据的实时显示功能,可以让用户能及时的了解到系统运行的状况和网站的检测状况,提高了系统与用户的交互性。

参考文献:

[1] 张剑钟. 基于跨站脚本的攻击与防范研究[D]. 山东理工大学, 2010.

[2] 邵鹏. 基于渗透测试的跨站脚本漏洞检测研究[D].2013.

[3] 鲍泽民. 跨站脚本攻击客户端防御技术研究[D].北京交通大学.2014.

[4] 张跃华, 王长春. 浅析跨站脚本的攻击与防御[J]. 现代计算机:专业版, 2009(2):109-110.

[5] 史冬蕾. 基于PHP的網站信息安全研究[D]. 西安工业大学, 2016.