基于dom的跨站脚本漏洞测试方法和系统的制作方法

文档序号:6433063阅读:844来源:国知局
专利名称:基于dom的跨站脚本漏洞测试方法和系统的制作方法
基于DOM的跨站脚本漏洞测试方法和系统技术领域
本申请涉及计算机网络安全测试技术领域,特别是涉及一种基于DOM的跨站脚本 漏洞测试方法及系统。
背景技术
跨站脚本漏洞(Cross Site Scripting,常简写作XSS)是Web应用程序在将数 据输出到网页的时候存在问题,导致攻击者可以将构造的恶意数据显示在页面的漏洞。跨 站脚本攻击注入的恶意代码运行在浏览器中,可以控制用户的浏览器,并获取用户计算 机信息、截获用户键盘输入、刺探用户所处局域网信息甚至对其他网站进行攻击。其中, DOM(Document Object Model,文档对象模型)是JavaScript输出的页面,基于DOM的跨站 脚本漏洞就是出现在JavaScript代码中的漏洞。
对于跨站脚本漏洞的测试多采用黑盒测试,即在不知道源代码的情况下通过各种 技术手段对Web应用程序进行的测试。一般是修改参数值为一个标志字符串,然后搜索页 面是否含有该字符串,如果有,页面会把参数输出,此时通过分析返回页面构造攻击参数来 判断是否有漏洞。但是基于DOM的跨站脚本漏洞就是出现在JavaScript代码中的漏洞,一 般的黑盒测试无法通过搜索页面源代码来判断是否有传入的标志字符串,也就无法判断是 否有漏洞出现,因此现有的测试方法无法实现漏洞的准确测试。发明内容
本申请所要解决的技术问题是提供一种基于DOM的跨站脚本漏洞测试方法及系 统,能够解决基于DOM的跨站脚本漏洞无法准确测试的问题。
为了解决上述问题,本申请公开了一种基于DOM的跨站脚本漏洞测试方法,包括 以下步骤
获取目标页面的源代码并提取其中的脚本代码;
遍历所有脚本代码,利用预先定义的脏数据入口获取脚本代码中所有脏数据入口 及脏数据入口传递的变量;
再次遍历所有脚本代码,获取所述脚本代码中的输出函数,并提取输出函数的参 数与脏数据入口及脏数据入口传递的变量进行匹配,若能匹配,则确定有漏洞存在;
记录漏洞信息。
进一步地,所述获取目标页面的源代码并提取其中的脚本代码包括
采用插件获取源代码中的脚本代码;或
用字符串截取脚本代码的script标签中的内容,并将各script标签中的内容拼接。
进一步地,所述遍历所有脚本代码,利用预先定义的脏数据入口获取脚本代码中 所有脏数据入口及脏数据入口传递的变量包括
逐行扫描代码,若扫描到等号,则把赋值语句分为左右两部分;
将等号右边部分用正则表达式分割成字母、数字和下划线组成的数组;
提取预先定义的脏数据入口,与所述数组进行匹配,若能匹配,则提取等号左边的 变量,并连同等号右边部分保存在脏数据的数组里;
重复前述三个步骤,直到所有代码都扫描完成。
进一步地,所述再次遍历所有脚本代码,获取所述脚本代码中的输出函数,并提取 输出函数的参数与脏数据入口及脏数据入口传递的变量进行匹配,若能匹配,则确定有漏 洞存在包括
将输出函数的参数与脏数据入口变量以及脏数据入口传递的变量进行匹配,如果 至少有一个能匹配上,则确定有漏洞存在。
进一步地,所述记录漏洞信息之后还包括
返回或展示漏洞信息。
进一步地,所述获取目标页面的源代码并提取其中的脚本代码之后还包括
对提取的脚本代码进行预处理,所述预处理包括去除或替换所述脚本代码中的无 用代码。
为了解决上述问题,本申请还公开了一种基于DOM的跨站脚本漏洞测试系统,包 括
代码获取模块,用于获取目标页面的源代码并提取其中的脚本代码;
脏数据变量获取模块,用于遍历所有脚本代码,利用预先定义的脏数据入口获取 脚本代码中所有脏数据入口及脏数据入口传递的变量;
漏洞识别模块,再次遍历所有脚本代码,获取所述脚本代码中的输出函数,并提取 输出函数的参数与脏数据入口及脏数据入口传递的变量进行匹配,若能匹配,则确定有漏 洞存在;
信息记录单元,用于记录漏洞信息。
进一步地,所述代码获取模块包括
插件单元,用于采用插件获取源代码中的脚本代码;或
截取单元,用于用字符串截取脚本代码的script标签中的内容,并将各script标 签中的内容拼接。
进一步地,所述脏数据变量获取模块包括
代码扫描单元,用于逐行扫描代码,若扫描到等号,则把赋值语句分为左右两部 分;
分割单元,用于将等号右边部分用正则表达式分割成字母、数字和下划线组成的 数组;
匹配单元,用于提取预先定义的脏数据入口,与所述数组进行匹配,若能匹配,则 提取等号左边的变量,并连同等号右边部分保存在脏数据的数组里。
进一步地,所述漏洞识别模块模块包括
匹配单元,用于将输出函数的参数与脏数据入口变量以及脏数据入口传递的变量 进行匹配,如果至少有一个能匹配上,则确定有漏洞存在。
进一步地,所述系统还包括
漏洞信息反馈模块,用于返回或展示漏洞信息。
进一步地,所述系统还包括
预处理模块,用于对提取的脚本代码进行预处理,去除或替换所述脚本代码中的 无用代码。
与现有技术相比,本申请包括以下优点
本申请通过提取页面源代码,并从中获取脚本代码,通过对脚本代码的扫描,并与 预先定义的脏数据入口进行匹配来获取脏数据入口以及脏数据入口传递的变量,从而发现 基于源代码发现基于DOM的跨站脚本漏洞。
进一步地,在对脚本代码的扫描过程中采用逐行扫描的方式,因此在发现漏洞后, 能将漏洞的位置定位到某一行,从而便于后续修复时的定位。
另外,通过正则表达式来分隔脚本代码中的赋值语句,用分割后的数组与预先定 义的脏数据入口来进行匹配的方式,可以较为精确的提取到脏数据入口以及脏数据入口传 递的变量,保证漏洞检测的准确性。而且无需采用javascript引擎,可以在写完代码还没 发布上线的时候就现问题,能够及时的发现问题并解决。
当然,实施本申请的任一产品不一定需要同时达到以上所述的所有优点。


图1是本申请的基于DOM的跨站脚本漏洞测试方法实施例一的流程图2是本申请的基于DOM的跨站脚本漏洞测试方法实施例二的流程图3是本申请的基于DOM的跨站脚本漏洞测试系统实施例一的结构示意图4是本申请的基于DOM的跨站脚本漏洞测试系统实施例二的结构示意图。
具体实施方式
为使本申请的上述目的、特征和优点能够更加明显易懂,下面结合附图和具体实 施方式对本申请作进一步详细的说明。
参照图1,示出本申请的一种基于DOM的跨站脚本漏洞测试方法实施例一,包括以 下步骤
步骤101,获取目标页面的源代码并提取其中的脚本代码。
其中,从源代码中提取脚本(javascript)内容可以直接用插件获取,例如,ruby 中可以直接用hpricot插件获取。另外,也可以用字符串截取的方式截取script标签中的 内容,在将各script标签中的内容拼接在一起。
步骤102,遍历所有脚本代码,利用预先定义的脏数据入口获取脚本代码中所有脏 数据入口及脏数据入口传递的变量。
脏数据为可能利用漏洞实现恶意攻击的数据,具体的,包括所有Dom的入口点以 及这些入口点所传递到的其他变量,可以通过对原有漏洞攻击进行统计获取。本实例中,预 先定义的脏数据包括location、document, referrer、window, name、document. URL 等等, 另外,如果代码中包含有aaa = document. URL ;那么,aaa也会被认为是脏数据。
其中,遍历脚本代码获取脏数据入口和脏数据入口传递变量的具体的过程为逐 行扫描所有脚本代码,若扫描到等号,则把赋值语句根据等号分为左右两部分,右边部分用 正则表达式分割成字母、数字和下划线组成的一个数组;提取预先定义的脏数据入口,并与右边部分组成的数组进行匹配,如果数组中包含预先定义的脏数据入口,就提取左边的变 量,并连同等号的右边部分一同保存到脏数据的数组里,直到遍历完成,获取到所有脏数据 入口以及脏数据入口传递的变量。
步骤103,再次遍历所有脚本代码,获取所述脚本代码中的输出函数,并提取输出 函数的参数与脏数据入口及脏数据入口传递的变量进行匹配,若能匹配,则确定有漏洞存在。
其中,匹配的过程为,将输出函数的参数与脏数据入口变量以及脏数据入口传递 的变量进行匹配,如果至少有一个能匹配上,则确定有漏洞存在。
步骤104,记录漏洞信息。
在确定有漏洞存在后,则可以记录下漏洞的相关信息,以便于后续处理。例如,漏 洞的位置、与漏洞相关的脏数据等等。
进一步地,在记录漏洞信息后,还可以将漏洞信息返回给用户或者进行展示,从而 便于用户对漏洞进行修复。
参照图2,示出本申请的基于DOM的跨站脚本漏洞测试方法实施例二,进一步地, 在前述步骤101之后还包括以下步骤
步骤201,对提取的脚本代码进行预处理。
预处理包括去除或者替换该脚本代码中的无用代码,即与后续处理无关,对后续 处理不会产生影响的代码,例如循环代码、判断代码等等。其中,可以采用正则表达式来查 找脚本代码中可以去除或者替换的无用代码,以保证预处理能够快速准确的完成。对脚本 代码进行预处理后可以减少代码的总量,从而提高后续处理的速度。
本申请通过提取页面源代码,并从中获取脚本代码,通过对脚本代码的扫描,并与 预先定义的脏数据入口进行匹配来获取脏数据入口以及脏数据入口传递的变量,从而发现 基于源代码发现基于DOM的跨站脚本漏洞。
进一步地,在对脚本代码的扫描过程中采用逐行扫描的方式,因此在发现漏洞后, 能将漏洞的位置定位到某一行,从而便于后续修复时的定位。
另外,通过正则表达式来分隔脚本代码中的赋值语句,用分割后的数组与预先定 义的脏数据入口来进行匹配的方式,可以较为精确的提取到脏数据入口以及脏数据入口传 递的变量,保证漏洞检测的准确性。而且无需采用javascript引擎,可以在写完代码还没 发布上线的时候就现问题,能够及时的发现问题并解决。
参照图3,示出本申请的基于DOM的跨站脚本漏洞测试系统实施例一,包括代码获 取模块10、脏数据变量获取模块20、漏洞识别模块30及信息记录模块40。
代码获取模块10,用于获取目标页面的源代码并提取其中的脚本代码。
脏数据变量获取模块20,用于遍历所有脚本代码,利用预先定义的脏数据入口获 取脚本代码中所有脏数据入口及脏数据入口传递的变量。
漏洞识别模块30,再次遍历所有脚本代码,获取所述脚本代码中的输出函数,并提 取输出函数的参数与脏数据入口及脏数据入口传递的变量进行匹配,若能匹配,则确定有 漏洞存在。
信息记录模块40,用于记录漏洞信息。
进一步地,代码获取模块10还包括插件单元或截取单元。其中,插件单元用于采用插件获取源代码中的脚本代码。截取单元用于用字符串截取脚本代码的script标签中 的内容,并将各script标签中的内容拼接。
进一步地,脏数据变量获取模块20包括代码扫描单元、分割单元和匹配单元。其 中,代码扫描单元,用于逐行扫描代码,若扫描到等号,则把赋值语句分为左右两部分。分割 单元,用于将等号右边部分用正则表达式分割成字母、数字和下划线组成的数组。匹配单 元,用于提取预先定义的脏数据入口,与所述数组进行匹配,若能匹配,则提取等号左边的 变量,并连同等号右边部分保存在脏数据的数组里。
进一步地,漏洞识别模块模块还包括匹配单元,用于将输出函数的参数与脏数据 入口变量以及脏数据入口传递的变量进行匹配,如果至少有一个能匹配上,则确定有漏洞 存在。
进一步地,该系统还包括漏洞信息反馈模块,用于返回或展示漏洞信息。
参照图4,示出本申请的基于DOM的跨站脚本漏洞测试系统实施例二,进一步地, 该系统还包括预处理模块50,用于对提取的脚本代码进行预处理,去除或替换所述脚本代 码中的无用代码。
本说明书中的各个实施例均采用递进的方式描述,每个实施例重点说明的都是与 其他实施例的不同之处,各个实施例之间相同相似的部分互相参见即可。对于系统实施例 而言,由于其与方法实施例基本相似,所以描述的比较简单,相关之处参见方法实施例的部 分说明即可。
以上对本申请所提供的基于DOM的跨站脚本漏洞测试方法及系统进行了详细介 绍,本文中应用了具体个例对本申请的原理及实施方式进行了阐述,以上实施例的说明只 是用于帮助理解本申请的方法及其核心思想;同时,对于本领域的一般技术人员,依据本申 请的思想,在具体实施方式
及应用范围上均会有改变之处,综上所述,本说明书内容不应理 解为对本申请的限制。
权利要求
1.一种基于DOM的跨站脚本漏洞测试方法,其特征在于,包括以下步骤 获取目标页面的源代码并提取其中的脚本代码; 遍历所有脚本代码,利用预先定义的脏数据入口获取脚本代码中所有脏数据入口及脏数据入口传递的变量; 再次遍历所有脚本代码,获取所述脚本代码中的输出函数,并提取输出函数的参数与脏数据入口及脏数据入口传递的变量进行匹配,若能匹配,则确定有漏洞存在; 记录漏洞信息。
2.如权利要求1所述的基于DOM的跨站脚本漏洞测试方法,其特征在于,所述获取目标页面的源代码并提取其中的脚本代码包括 采用插件获取源代码中的脚本代码;或 用字符串截取脚本代码的script标签中的内容,并将各script标签中的内容拼接。
3.如权利要求1所述的基于DOM的跨站脚本漏洞测试方法,其特征在于,所述遍历所有脚本代码,利用预先定义的脏数据入口获取脚本代码中所有脏数据入口及脏数据入口传递的变量包括 逐行扫描代码,若扫描到等号,则把赋值语句分为左右两部分; 将等号右边部分用正则表达式分割成字母、数字和下划线组成的数组; 提取预先定义的脏数据入口,与所述数组进行匹配,若能匹配,则提取等号左边的变量,并连同等号右边部分保存在脏数据的数组里; 重复前述三个步骤,直到所有代码都扫描完成。
4.如权利要求1所述的基于DOM的跨站脚本漏洞测试方法,其特征在于,所述再次遍历所有脚本代码,获取所述脚本代码中的输出函数,并提取输出函数的参数与脏数据入口及脏数据入口传递的变量进行匹配,若能匹配,则确定有漏洞存在包括 将输出函数的参数与脏数据入口变量以及脏数据入口传递的变量进行匹配,如果至少有一个能匹配上,则确定有漏洞存在。
5.如权利要求1所述的基于DOM的跨站脚本漏洞测试方法,其特征在于,所述记录漏洞信息还包括 返回或展示漏洞信息。
6.如权利要求1至5任一项所述的基于DOM的跨站脚本漏洞测试方法,其特征在于,所述获取目标页面的源代码并提取其中的脚本代码之后还包括 对提取的脚本代码进行预处理,所述预处理包括去除或替换所述脚本代码中的无用代码。
7.一种基于DOM的跨站脚本漏洞测试系统,其特征在于,包括 代码获取模块,用于获取目标页面的源代码并提取其中的脚本代码; 脏数据变量获取模块,用于遍历所有脚本代码,利用预先定义的脏数据入口获取脚本代码中所有脏数据入口及脏数据入口传递的变量; 漏洞识别模块,再次遍历所有脚本代码,获取所述脚本代码中的输出函数,并提取输出函数的参数与脏数据入口及脏数据入口传递的变量进行匹配,若能匹配,则确定有漏洞存在; 信息记录单元,用于记录漏洞信息。
8.如权利要求7所述的基于DOM的跨站脚本漏洞测试系统,其特征在于,所述代码获取模块包括 插件单元,用于采用插件获取源代码中的脚本代码;或 截取单元,用于用字符串截取脚本代码的script标签中的内容,并将各script标签中的内容拼接。
9.如权利要求7所述的基于DOM的跨站脚本漏洞测试系统,其特征在于,所述脏数据变量获取模块包括 代码扫描单元,用于逐行扫描代码,若扫描到等号,则把赋值语句分为左右两部分; 分割单元,用于将等号右边部分用正则表达式分割成字母、数字和下划线组成的数组; 匹配单元,用于提取预先定义的脏数据入口,与所述数组进行匹配,若能匹配,则提取等号左边的变量,并连同等号右边部分保存在脏数据的数组里。
10.如权利要求7所述的基于DOM的跨站脚本漏洞测试系统,其特征在于,所述漏洞识别模块模块包括 匹配单元,用于将输出函数的参数与脏数据入口变量以及脏数据入口传递的变量进行匹配,如果至少有一个能匹配上,则确定有漏洞存在。
11.如权利要求7所述的基于DOM的跨站脚本漏洞测试系统,其特征在于,所述系统还包括 漏洞信息反馈模块,用于返回或展示漏洞信息。
12.如权利要求7至11任一项所述的基于DOM的跨站脚本漏洞测试系统,其特征在于,所述系统还包括 预处理模块,用于对提取的脚本代码进行预处理,去除或替换所述脚本代码中的无用代码。
全文摘要
本申请提供了一种基于DOM的跨站脚本漏洞测试方法,包括获取目标页面的源代码并提取其中的脚本代码;遍历所有脚本代码,利用预先定义的脏数据入口获取脚本代码中所有脏数据入口及脏数据入口传递的变量;再次遍历所有脚本代码,获取所述脚本代码中的输出函数,并提取输出函数的参数与脏数据入口及脏数据入口传递的变量进行匹配,若能匹配,则确定有漏洞存在;记录漏洞信息。本申请还提供一种实现前述方法的基于DOM的跨站脚本漏洞测试系统。本申请的基于DOM的跨站脚本漏洞测试方法及系统,能够解决基于DOM的跨站脚本漏洞无法准确测试的问题。
文档编号G06F11/36GK102999420SQ20111027027
公开日2013年3月27日 申请日期2011年9月13日 优先权日2011年9月13日
发明者谢雄钦, 吴翰清 申请人:阿里巴巴集团控股有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1