漏洞检测方法、装置、计算机设备及存储介质转让专利

申请号 : CN201711294659.2

文献号 : CN107832622B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 何双宁

申请人 : 平安科技(深圳)有限公司

摘要 :

本发明涉及一种漏洞检测方法、装置、计算机设备及存储介质。该方法包括:将漏洞检测数据拼接至待检测网页的网址中;根据拼接后的网址向待检测网页对应的第一网站服务器发起网页数据获取请求;接收第一网站服务器返回的与网页数据获取请求对应的响应数据;获取网址的源数据;根据响应数据和源数据得到与网址具有漏洞检测数据传递关系的关联网址集合;读取关联网址集合中的关联网址,向关联网址对应的第二网站服务器发起请求;获取第二网站服务器返回的响应文档;根据响应文档和漏洞检测数据进行网页安全漏洞检测。上述漏洞检测方法、装置、计算机设备及存储介质能够减小网页安全漏洞漏检的概率。

权利要求 :

1.一种漏洞检测方法,其特征在于,所述方法包括:将漏洞检测数据拼接至待检测网页的网址中,所述漏洞检测数据中包括特征检测字符,所述特征检测字符为构造的可以触发存储型XSS漏洞的字符;

根据拼接后的网址向所述待检测网页对应的第一网站服务器发起网页数据获取请求;

接收所述第一网站服务器返回的与所述网页数据获取请求对应的响应数据;

获取所述网址的源数据;

根据所述响应数据和所述源数据得到与所述网址具有漏洞检测数据传递关系的关联网址集合;

读取所述关联网址集合中的关联网址,向所述关联网址对应的第二网站服务器发起请求;

获取所述第二网站服务器返回的响应文档;

根据所述响应文档和所述漏洞检测数据进行网页安全漏洞检测。

2.根据权利要求1所述的方法,其特征在于,所述根据所述响应数据和所述源数据得到与所述网址具有所述漏洞检测数据传递关系的关联网址集合的步骤,包括:当所述响应数据为对象标记数据时,获取跳转关键字表;

从所述对象标记数据中查找与所述跳转关键字表中的跳转关键字相匹配的字符对;

根据查找出的字符对生成跳转网址;

获取所述源数据中的源网址;

根据所述跳转网址和所述源网址生成关联网址集合。

3.根据权利要求1所述的方法,其特征在于,所述根据所述响应数据和所述源数据得到与所述网址具有所述漏洞检测数据传递关系的关联网址集合的步骤,包括:当所述响应数据为超文本文档时,从所述响应数据中提取出网址跳转标签;

根据所述拼接后的网址与所述网址跳转标签生成目标跳转网址;

获取所述源数据中的源网址;

根据所述目标跳转网址和所述源网址生成关联网址集合。

4.根据权利要求1所述的方法,其特征在于,所述根据所述响应数据和所述源数据得到与所述网址具有所述漏洞检测数据传递关系的关联网址集合的步骤,包括:当所述响应数据为超文本文档且所述超文本文档中不存在网址跳转标签时,触发超文本文档事件得到第一文档节点树;

从所述第一文档节点树中各节点的标签值中提取出节点网址;

获取所述源数据中的源网址;

根据所述节点网址和所述源网址生成关联网址集合。

5.根据权利要求1所述的方法,其特征在于,所述根据所述响应文档和所述漏洞检测数据进行网页安全漏洞检测的步骤,包括:触发所述响应文档中的超文本文档事件得到第二文档节点树;

检测所述第二文档节点树中各节点的节点数据中是否存在所述漏洞检测数据;

当节点数据中存在所述漏洞检测数据时,检测所述漏洞检测数据是否被执行;

当所述漏洞检测数据被执行时,将所述关联网址对应的网页进行网页安全漏洞标记。

6.一种漏洞检测装置,其特征在于,所述装置包括:数据拼接模块,用于将漏洞检测数据拼接至待检测网页的网址中,所述漏洞检测数据中包括特征检测字符,所述特征检测字符为构造的可以触发存储型XSS漏洞的字符;第一请求模块,用于根据拼接后的网址向所述待检测网页对应的第一网站服务器发起网页数据获取请求;

响应数据接收模块,用于接收所述第一网站服务器返回的与所述网页数据获取请求对应的响应数据;

链接数据获取模块,用于获取所述网址的源数据;

关联网址获取模块,用于根据所述响应数据和所述源数据得到与所述网址具有漏洞检测数据传递关系的关联网址集合;

第二请求模块,用于读取所述关联网址集合中的关联网址,向所述关联网址对应的第二网站服务器发起请求;

响应文档获取模块,用于获取所述第二网站服务器返回的响应文档;

漏洞检测模块,用于根据所述响应文档和所述漏洞检测数据进行网页安全漏洞检测。

7.根据权利要求6所述的装置,其特征在于,所述关联网址获取模块包括:跳转表获取模块,用于当所述响应数据为对象标记数据时,获取跳转关键字表;

字符对匹配模块,用于从所述对象标记数据中查找与所述跳转关键字表中的跳转关键字相匹配的字符对;

跳转网址生成模块,用于根据查找出的字符对生成跳转网址;

源网址获取模块,用于获取所述源数据中的源网址;

第一集合生成模块,用于根据所述跳转网址和所述源网址生成关联网址集合。

8.根据权利要求6所述的装置,其特征在于,所述关联网址获取模块包括:跳转标签提取模块,用于当所述响应数据为超文本文档时,从所述响应数据中提取出网址跳转标签;

跳转网址生成模块,用于根据所述拼接后的网址与所述网址跳转标签生成目标跳转网址;

源网址获取模块,用于获取所述源数据中的源网址;

第二集合生成模块,用于根据所述目标跳转网址和所述源网址生成关联网址集合。

9.一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述程序时实现权利要求1至5任意一项所述方法的步骤。

10.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,该程序被处理器执行时实现权利要求1至5任意一项所述方法的步骤。

说明书 :

漏洞检测方法、装置、计算机设备及存储介质

技术领域

[0001] 本发明涉及计算机技术领域,特别是涉及一种漏洞检测方法、装置、计算机设备及存储介质。

背景技术

[0002] 存储型跨站脚本攻击漏洞是一种较为常见的网页应用中的计算机安全漏洞。现有的存储型跨站脚本攻击漏洞的检测方案中,通常先将用于触发漏洞的检测规则存储到网站的服务器端,等待用户浏览网页或是通过网页爬虫爬取网站时根据检测规则检测跨站脚本攻击漏洞。但是,用户随机浏览的网页和通过网页爬虫爬取的网页往往不是我们需要进行漏洞检测的网页。因此,目前存储型跨站脚本攻击漏洞的检测方案具有一定的盲目性,容易产生漏洞漏报问题。

发明内容

[0003] 基于此,有必要针对上述漏洞检测中出现的容易产生漏洞漏报的问题,提供一种漏洞检测方法、装置、计算机设备及存储介质。
[0004] 一种漏洞检测方法,所述方法包括:
[0005] 将漏洞检测数据拼接至待检测网页的网址中;
[0006] 根据拼接后的网址向所述待检测网页对应的第一网站服务器发起网页数据获取请求;接收所述第一网站服务器返回的与所述网页数据获取请求对应的响应数据;
[0007] 获取所述网址的源数据;
[0008] 根据所述响应数据和所述源数据得到与所述网址具有漏洞检测数据传递关系的关联网址集合;
[0009] 读取所述关联网址集合中的关联网址,向所述关联网址对应的第二网站服务器发起请求;
[0010] 获取所述第二网站服务器返回的响应文档;
[0011] 根据所述响应文档和所述漏洞检测数据进行网页安全漏洞检测。
[0012] 在其中一个实施例中,所述根据所述响应数据和所述源数据得到与所述网址具有所述漏洞检测数据传递关系的关联网址集合的步骤,包括:
[0013] 当所述响应数据为对象标记数据时,获取跳转关键字表;
[0014] 从所述对象标记数据中查找与所述跳转关键字表中的跳转关键字相匹配的字符对;
[0015] 根据查找出的字符对生成跳转网址;
[0016] 获取所述源数据中的源网址;
[0017] 根据所述跳转网址和所述源网址生成关联网址集合。
[0018] 在其中一个实施例中,所述根据所述响应数据和所述源数据得到与所述网址具有所述漏洞检测数据传递关系的关联网址集合的步骤,包括:
[0019] 当所述响应数据为超文本文档时,从所述响应数据中提取出网址跳转标签;
[0020] 根据所述拼接后的网址与所述网址跳转标签生成目标跳转网址;
[0021] 获取所述源数据中的源网址;
[0022] 根据所述目标跳转网址和所述源网址生成关联网址集合。
[0023] 在其中一个实施例中,所述根据所述响应数据和所述源数据得到与所述网址具有所述漏洞检测数据传递关系的关联网址集合的步骤,包括:
[0024] 当所述响应数据为超文本文档且所述超文本文档中不存在网址跳转标签时,触发超文本文档事件得到第一文档节点树;
[0025] 从所述第一文档节点树中各节点的标签值中提取出节点网址;
[0026] 获取所述源数据中的源网址;
[0027] 根据所述节点网址和所述源网址生成关联网址集合。
[0028] 在其中一个实施例中,所述根据所述响应文档和所述漏洞检测数据进行网页安全漏洞检测的步骤,包括:
[0029] 触发所述响应文档中的超文本文档事件得到第二文档节点树;
[0030] 检测所述第二文档节点树中各节点的节点数据中是否存在所述漏洞检测数据;
[0031] 当节点数据中存在所述漏洞检测数据时,检测所述漏洞检测数据是否被触发执行;
[0032] 当所述漏洞检测数据被执行时,将所述关联网址对应的网页进行网页安全漏洞标记。
[0033] 一种漏洞检测装置,所述装置包括:
[0034] 数据拼接模块,用于将漏洞检测数据拼接至待检测网页的网址中;
[0035] 第一请求模块,用于根据拼接后的网址向所述待检测网页对应的第一网站服务器发起网页数据获取请求;
[0036] 响应数据接收模块,用于接收所述第一网站服务器返回的与所述网页数据获取请求对应的响应数据;
[0037] 链接数据获取模块,用于获取所述网址的源数据;
[0038] 关联网址获取模块,用于根据所述响应数据和所述源数据得到与所述网址具有漏洞检测数据传递关系的关联网址集合;
[0039] 第二请求模块,用于读取所述关联网址集合中的关联网址,向所述关联网址对应的第二网站服务器发起请求;
[0040] 响应文档获取模块,用于获取所述第二网站服务器返回的响应文档;
[0041] 漏洞检测模块,用于根据所述响应文档和所述漏洞检测数据进行网页安全漏洞检测。
[0042] 在其中一个实施例中,所述关联网址获取模块包括:
[0043] 跳转表获取模块,用于当所述响应数据为对象标记数据时,获取跳转关键字表;
[0044] 字符对匹配模块,用于从所述对象标记数据中查找与所述跳转关键字表中的跳转关键字相匹配的字符对;
[0045] 跳转网址生成模块,用于根据查找出的字符对生成跳转网址;
[0046] 源网址获取模块,用于获取所述源数据中的源网址;
[0047] 第一集合生成模块,用于根据所述跳转网址和所述源网址生成关联网址集合。
[0048] 在其中一个实施例中,所述关联网址获取模块包括:
[0049] 跳转标签提取模块,用于当所述响应数据为超文本文档时,从所述响应数据中提取出网址跳转标签;
[0050] 跳转网址生成模块,用于根据所述拼接后的网址与所述网址跳转标签生成目标跳转网址;
[0051] 源网址获取模块,用于获取所述源数据中的源网址;
[0052] 第二集合生成模块,用于根据所述目标跳转网址和所述源网址生成关联网址集合。
[0053] 一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现上述方法的步骤。
[0054] 一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现上述方法的步骤。
[0055] 上述漏洞检测方法、装置、计算机设备及存储介质,在待检测网页的网址中拼接漏洞检测数据之后,向网址对应的网站服务器发起请求,在接收到网站服务器返回的响应数据后,立即根据响应数据和网址本身的链接数据得到与待检测网址具有漏洞检测数据传递关联的网址结合,并根据特征检测数据对集合中的所有关联网址进行网页安全漏洞的检测,从而能够保证漏洞检测数据的有效性,并尽可能地检测所有具有数据传递关联的网址,减小网页安全漏洞漏检的概率,提高漏洞检测效率。

附图说明

[0056] 图1为一个实施例中漏洞检测方法的应用环境图;
[0057] 图2为一个实施例中漏洞检测方法的方法流程图;
[0058] 图3为一个实施例中漏洞检测装置的结构示意图;
[0059] 图4为一个实施例中计算机设备的内部结构示意图。

具体实施方式

[0060] 为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
[0061] 在详细说明根据本发明的实施例前,应该注意到的是,所述的实施例主要在于与漏洞检测方法、装置、计算机设备及存储介质相关的步骤和系统组件的组合。因此,所属系统组件和方法步骤已经在附图中通过常规符号在适当的位置表示出来了,并且只示出了与理解本发明的实施例有关的细节,以免因对于得益于本发明的本领域普通技术人员而言显而易见的那些细节模糊了本发明的公开内容。
[0062] 在本文中,诸如左和右,上和下,前和后,第一和第二之类的关系术语仅仅用来区分一个实体或动作与另一个实体或动作,而不一定要求或暗示这种实体或动作之间的任何实际的这种关系或顺序。术语“包括”、“包含”或任何其他变体旨在涵盖非排他性的包含,由此使得包括一系列要素的过程、方法、物品或者设备不仅包含这些要素,而且还包含没有明确列出的其他要素,或者为这种过程、方法、物品或者设备所固有的要素。
[0063] 本发明实施例中所提供的漏洞检测方法可以应用于如图1所示的应用环境中。终端与第一网站服务器以及第二网站服务器通过网络连接,第一网站服务器与第二网站服务器也可以通过网络连接。其中,第一网站服务器与第二网站服务器的数量均可以为多个。终端将漏洞检测数据拼接至待检测网页的网址后,根据拼接后的网址相待检测网页对应的第一网站服务器发起请求,第一网站服务器接收请求后向终端返回响应数据。终端根据接收的响应数据和网址的源数据解析得到与网址具有漏洞检测数据传递关系的关联网址集合。终端读取关联网址集合中的关联网址,并向关联网址对应的第二网站服务器发起请求。第二网站服务器接收请求后向终端返回包括响应文档的数据。终端获取响应文档,并根据响应文档和漏洞检测数据判断关联网址对应的网页中是否存在安全漏洞。其中,第一网站服务器接收终端发送的网页请求后,从请求中读取漏洞检测数据进行存储,第一网站服务器与第二网站服务器可以进行漏洞检测数据的传递。上述方法,从而能够保证漏洞检测数据的有效性,减小网页安全漏洞漏检的概率,提高漏洞检测效率。
[0064] 下述实施方式以漏洞检测方法应用于图1中的终端为例进行说明。但需要说明的是,实际应用中该方法并不仅限应用于上述终端。
[0065] 请参阅图2,图2为一个实施例中的漏洞检测方法的流程图,该方法具体包括以下步骤:
[0066] 步骤210,将漏洞检测数据拼接至待检测网页的网址中。
[0067] 漏洞检测数据用于检测存储型XSS(Cross Site Script,跨站脚本攻击)漏洞。漏洞检测数据中包括特征检测字符和标识字符。特征检测字符为构造的可以触发存储型XSS漏洞的字符,如“、”、‘、’、/等,但不限于上字符,特征检测字符可以为任何可触发XSS漏洞的字符。标识字符用于唯一标识漏洞检测数据,标识字符可以为用于提交给网站的参数如用户名等,但标识字符并不限于此,还可以包括网页名、域名等等。
[0068] 待检测网页为检测存储型XSS漏洞的目标网页,待检测网页对应于一个网址URL(Uniform Resoure Locator,统一资源定位器)。
[0069] 在一个实施例中,终端中存储了多个待扫描的URL数据,URL数据包括URL的POST数据,URL对应的来源链接(referer)数据,URL采集时间,最近扫描时间等等。终端中还存储了多个用于存储型XSS漏洞扫描的漏洞检测数据,并存储了检测到的存储型XSS漏洞的相关数据,包括存储型XSS漏洞的漏洞名称,检测时间等。
[0070] 终端从存储的数据中逐一读取URL和漏洞检测数据。终端识别出URL中的待检测参数值,并将漏洞检测数据与待检测参数值进行组合生成拼接的待检测网址URL。
[0071] 在一个实施例中,待检测参数值为URL的query参数中的name/value数据对,终端将漏洞检测数据插入在name/value数据对的后面生成拼接URL,若一个URL中存在多个name/value数据对,则将漏洞检测数据分别插入各name/value数据对后面,生成对应的多个拼接URL。在其他实施例中,也可以将漏洞检测数据插入在数据对的前面或其他位置,并不限于上述描述方式。
[0072] 例如,漏洞检测数据为,其中,特征检测字符为<>,标识字符为img src=x onerror=”alert(123)”。待检测网页的网址为http://www.test.com/test.php?a=1&b=2。网址中的query参数为a=1&b=2,包含两个数据对a=1和b=2,终端将漏洞检测数据分别插入两个数据对后面可以得到两个拼接URL,分别为http://www.test.com/test.php?a=1&b=2及http://www.test.com/test.php?a=1&b=2
[0073] 若终端将漏洞检测数据拼接生成多个拼接网址,则逐一读取生成的拼接网址并分别进行下述处理步骤。
[0074] 步骤220,根据拼接后的网址向待检测网页对应的第一网站服务器发起网页数据获取请求。
[0075] 终端根据拼接后的网址向对应的第一网站服务器发起HTTP请求,将拼接网址中的漏洞检测数据和参数提交至对应的网站服务器内。终端可以GET方式提交数据,也可以通过其他方式如可以采用POST方式提交数据。
[0076] 网站服务器接收请求后,网站服务器可以从请求中获取参数值和漏洞检测数据,并将漏洞检测数据存储在服务器本地。此外,网站服务器对请求进行响应,向终端返回响应数据。
[0077] 步骤230,接收第一网站服务器返回的与网页数据获取请求对应的响应数据。
[0078] 终端接收第一网站服务器返回的响应数据。响应数据可以包括状态码、响应头数据、响应网页的相关数据如文本信息等。
[0079] 步骤240,获取网址的源数据。
[0080] 终端从本地存储的URL数据中查找待检测网页的源数据。在本实施例中,源数据为待检测网页网址的链接数据(referer)数据。例如,用户浏览的网页是通过另一个URL提交数据至网站服务器的,则通常也会在另一个网页中查看到刚刚提交到的数据,则另一个网页便是浏览网页的链接数据,另一个网页的URL便是浏览URL的源网址。源数据中包括所有待检测网页网址的源网址。
[0081] 步骤250,根据响应数据和源数据得到与网址具有漏洞检测数据传递关系的关联网址集合。
[0082] 终端对响应数据进行解析,对响应数据的文本信息进行数据提取并生成与待检测网址具有漏洞检测数据传递关系的网址,具有漏洞检测数据传递关系是指两个网址之间具有可以进行漏洞检测数据传递的关系。如待检测网址的跳转网址、源网址等均是与待检测网址具有漏洞检测数据传递关系的网址。当从待检测网址对应的网页跳转至跳转网址对应的网页时,可以将漏洞检测数据进行数据传递。终端从源数据中提取待检测网址的源网址,源网址为待检测网址的链接网址,二者之间也可以进行漏洞检测数据传递。终端根据从响应数据中解析出的网址和源网址进行汇总生成关联网址集合。
[0083] 步骤260,读取关联网址集合中的关联网址,向关联网址对应的第二网站服务器发起请求。
[0084] 终端从关联网址集合中逐一读取关联网址,并分别根据关联网址向对应的第二网站服务器发起HTTP请求。在本实施例中,第二网站服务器是指与关联网址对应的网站服务器,不同的关联网址可能对应于不同的第二网站服务器。本实施例中的第一与第二是为了将待检测网页的网址对应的网站服务器与关联网址对应的服务器进行区分,并没有特殊的含义。第二网站服务器对请求进行响应,并向终端返回响应数据。
[0085] 关联网址与待检测网址可以为同一域名、同一目录下的,关联网址与待检测网址也可以为不用域名、不同目录下的。第一网站服务器与第二网站服务器可能为相同的网站服务器,第一网站服务器与第二网站服务器也可能为不同的网站服务器。
[0086] 步骤270,获取第二网站服务器返回的响应文档。
[0087] 终端接收第二网站服务器返回的响应数据,并获取响应数据中的响应文档。响应文档通常为HTML超文本文档。
[0088] 步骤280,根据响应文档和漏洞检测数据进行网页安全漏洞检测。
[0089] 终端对响应文档进行解析并获取解析后的数据,判断解析后的数据中是否存在漏洞检测数据,当存在漏洞检测数据时,判断漏洞检测数据能够被当做代码被执行,当漏洞检测数据可以被执行时,检测到存储型XSS漏洞,终端将向第二网站服务器发起请求的关联网址对应的网页进行网页安全漏洞标记。
[0090] 终端继续向下一个关联网址对应的第二网站服务器发起请求,并根据上述方法进行网页安全漏洞检测。当对拼接后的网址的所有关联网址检测完毕后,终端读取下一个漏洞检测数据,并继续执行步骤210。当终端将所有的漏洞检测数据与待检测网页的网址拼接并检测完毕后,终端读取下一个存储的URL网址进行继续上述的存储型XSS漏洞的漏洞检测方法。
[0091] 目前的存储型XSS漏洞的漏洞检测方法中,一般是将漏洞检测数据拼接至A网址中,再通过请求A网址,将漏洞检测数据存储至网站服务器的数据库表中,再等待用户浏览或者网站安全人员通过网页爬虫爬取B网址,将漏洞检测数据加载到客户端让漏洞检测数据触发安全漏洞进行检测。但是,目前的检测方法中,通过访问A网址将漏洞检测数据存储到网站服务器后,不知道哪些A网址的链接网址能够触发安全漏洞,浏览的B网址往往不是能够触发安全漏洞的网址。另一方面,存储在网站服务器的漏洞检测数据需要及时读取才能够触发漏洞,而等待用户浏览或工作人员爬取需要一定的时间,这段时间间隔内存储在网站服务器中的漏洞检测数据无法及时读取,很可能被其他数据覆盖掉,这时,即使能够触发安全漏洞的B网址被浏览到,漏洞检测数据也无法进行加载,也无法进行存储型XSS漏洞的检测。
[0092] 在本实施例中,终端将漏洞检测数据拼接至待检测网页的网址中后,立即对网站服务器返回的响应体数据和网址的源数据进行数据分析,从中提取出与待检测网页具有数据传递行为关系的关联网址,并立即对关联网址对应的网页进安全漏洞检测,从而能够对关联网址进行针对性地检测,提高漏洞的检出效率,同时可以使漏洞检测数据保持时效性,降低安全漏洞漏报的风险。
[0093] 在一个实施例中,根据响应数据和源数据得到与网址具有漏洞检测数据传递关系的关联网址集合的步骤,包括:当响应数据为对象标记数据时,获取跳转关键字表;从对象标记数据中查找与跳转关键字表中的跳转关键字相匹配的字符对;根据查找出的字符对生成跳转网址;获取源数据中的源网址;根据跳转网址和源网址生成关联网址集合。
[0094] 终端接收响应数据后,判断响应数据是否为对象标记数据,当终端判断响应数据为对象标记数据时,启动对象标记数据分析引擎计算关联网址。具体地,终端判断响应数据的格式是否为JSON字符串格式,当为JSON字符串格式时,判断响应数据为对象标记数据。
[0095] 当响应数据为对象标记数据时,终端获取跳转关键字表。跳转关键字表中存储了URL跳转关键字,如location,href,jump,next,url,target_url等等。终端对JSON字符串进行解析,从JSON字符串中提取key/value字符对,终端将key/value字符对中的key值与跳转关键字表中的跳转关键字进行匹配,判断跳转关键字表中是否存在与key值相同的跳转关键字,当存在相同的跳转关键字时,字符对匹配成功。终端判断匹配成功的字符对中的value值是否为URL形式的字符串,当value值为URL形式的字符串时,对value值进行解析生成跳转网址,并将生成的跳转网址添加至关联网址集合中。当value值不是URL形式的字符串时,对其不做处理,继续进行下一个key/value字符对的跳转关键字的匹配。
[0096] 在一个实施例中,终端在对value值进行解析生成跳转网址的步骤包括:判断value值中URL形式字符串的类型,URL形式字符串共包括三种类型,第一种为字符串的前缀为“http://”或“http://?”,第二种为字符串的首个字符为“/”,第三种为其他类型的字符串。当终端判断出value值中URL形式字符串为第一种类型时,终端直接将value值作为跳转网址;当终端判断出value值中URL形式字符串为第二种类型时,终端将拼接后网址的域名部分与value值进行拼接并生成跳转网址;当当终端判断出value值中URL形式字符串为第三种类型时,将拼接后网址的目录部分与value值进行拼接并生成跳转网址。
[0097] 例如,当前拼接后的网址为http://www.test.com/test/a.html,第一种类型的value值为http://www.test.com/dist/hello.html,则生成的跳转网址为http://www.test.com/dist/hello.html;第二种类型的value值为/hello.html,拼接后的网址的域名部分为http://www.test.com,则将域名与value值拼接生成的跳转网址为http://www.test.com/hello.html;第二种类型的value值为hello.html,为一个相对路径,需要拼接上拼接后的网址的目录http://www.test.com/test/,生成的跳转网址为http://www.test.com/test/hello.html。
[0098] 当对象标记数据中的key/value字符对与跳转关键字匹配失败时,终端判断字符对中的value值是否为URL形式的字符串,当字符对中的value值为URL形式的字符串时,终端将相应的key值添加到跳转关键字训练池中,并向审核终端发送关键字验证请求,审核终端的工作人员接收到请求后,对跳转关键字训练池中的数据进行验证,验证通过后向终端返回关键字及验证通过通知,当终端接收到关键字验证通过通知后,终端将相应的key值添加至跳转关键字表中,从而能够不断对跳转关键字表进行更新。当字符对中的value值不是URL形式的字符串时,对其不做处理,继续进行下一个key/value字符对的跳转关键字的匹配,重复上述步骤,直至响应数据中的所有字符对匹配完成为止。
[0099] 终端从源数据中提取待检测网页的网址的源网址,并将提取出的源网址添加至关联网址集合中,从响应数据中解析出的跳转网址和从源数据中提取出的源网址均为待检测网页的关联网址,共同构成了关联网址集合。
[0100] 在本实施例中,当响应数据为对象标记数据时,将对象标记数据中的字符对与跳转关键字进行匹配,从匹配成功的字符对中解析出于与待检测网址关联的跳转网址,并从源数据中提取出待检测网址的链接来源网址,从而终端根据源数据和响应数据能够自动进行关联网址的解析和提取工作。
[0101] 在一个实施例中,根据响应数据和源数据得到与网址具有漏洞检测数据传递关系的关联网址集合的步骤,包括:当响应数据为超文本文档时,从响应数据中提取出网址跳转标签;根据拼接后的网址与网址跳转标签生成目标跳转网址;获取源数据中的源网址;根据目标跳转网址和源网址生成关联网址集合。
[0102] 当终端判断响应数据不是对象标记数据时,终端判断响应数据是否为超文本文档,具体地,终端判断响应数据是否为HTML格式的超文本文档。当终端判断出响应数据为超文本文档时,终端判断超文本文档中的响应头部分是否存在网址跳转标签,当超文本文档中存在网址跳转标签时,终端根据拼接后的网址和网址跳转标签生成目标跳转网址。
[0103] 在一个实施例中,终端根据正则表达式对超文本文档的响应头部分提取进行正则表达式匹配,当匹配成功时,根据正则匹配结果生成URL特征字符串;当对响应头部分匹配失败时,遍历超文本文档得到script标签,对script标签进行正则表达式匹配,当匹配成功时,根据正则匹配结果生成URL特征字符串。
[0104] 例如,终端根据正则表达式“”对超文本文档的响应头部分进行正则表达式匹配,当匹配成功时,将表达式中(.*)匹配的部分提取为URL特征字符串;当匹配失败时,根据正则表达式“window.location.href='(.*)';”对script标签进行正则表达式匹配,当匹配成功时,将表达式中(.*)匹配的部分提取为URL特征字符串;当匹配失败时,根据正则表达式“set Timeout("javascript:location.href='(.*)'",[0-9]+);”对script标签进行正则表达式匹配,当匹配成功时,将表达式中(.*)匹配的部分提取为URL特征字符串。
[0105] 终端对生成的URL特征字符串的类型进行判断,URL特征字符串也如上述实施例中的URL形式字符串的三种类型,终端根据URL特征字符串的类型以及拼接后的网址生成目标跳转网址,拼接方式同上述实施例,在此不再赘述。
[0106] 终端从源数据中提取待检测网页的网址的源网址,并将提取出的源网址添加至关联网址集合中,从响应数据中解析出的目标跳转网址和从源数据中提取出的源网址均为待检测网页的关联网址,共同构成了关联网址集合。
[0107] 在本实施例中,当响应数据为超文本文档时,从超文本文档中提取跳转标签,并根据跳转标签解析出目标跳转网址,并从源数据中提取出待检测网址的链接来源网址,从而终端根据源数据和响应数据能够自动进行关联网址的解析和提取工作。
[0108] 在一个实施例中,根据响应数据和源数据得到与网址具有漏洞检测数据传递关系的关联网址集合的步骤,包括:当响应数据为超文本文档且超文本文档中不存在网址跳转标签时,触发超文本文档事件得到第一文档节点树;从第一文档节点树中各节点的标签值中提取出节点网址;获取源数据中的源网址;根据节点网址和源网址生成关联网址集合。
[0109] 当终端判断出响应数据为超文本文档,并且超文本文档中不存在网址跳转标签时,终端依次触发超文本HTML文档中的所有事件,触发超文本文档事件后,文档数据发生变化,终端得到数据发生变化后的第一文档节点树。终端遍历第一文档节点树中的各个节点数据,从节点数据中提取标签值,判断提取出的标签值中是否存在URL,当存在URL时,将URL提取为节点网址,并将节点网址添加至关联网址集合中。
[0110] 终端从源数据中提取待检测网页的网址的源网址,并将提取出的源网址添加至关联网址集合中,从文档节点树的节点数据中提取出的节点网址和从源数据中提取出的源网址均为待检测网页的关联网址,共同构成了关联网址集合。
[0111] 在本实施例中,当响应数据为超文本文档且超文本文档中不存在网址跳转标签时,从进行事件触发的超文本文档的节点树的标签值中提取节点网址,并从源数据中提取出待检测网址的链接来源网址,从而终端根据源数据和响应数据能够自动进行关联网址的解析和提取工作。
[0112] 在一个实施例中,根据响应文档和漏洞检测数据进行网页安全漏洞检测的步骤,包括:触发响应文档中的超文本文档事件得到第二文档节点树;检测第二文档节点树中各节点的节点数据中是否存在漏洞检测数据;当节点数据中存在漏洞检测数据时,检测漏洞检测数据是否被触发执行;当漏洞检测数据被执行时,将关联网址对应的网页进行网页安全漏洞标记。
[0113] 终端接收第二网站服务器返回的响应文档后,终端依次触发超文本HTML文档中的所有事件,触发超文本文档事件后,文档数据发生变化,终端得到数据发生变化后的第二文档节点树。终端遍历第二文档节点树中的各个节点数据,查找节点数据中是否存在漏洞检测数据,当节点数据中存在漏洞检测数据时,终端检测漏洞检测数据是否可作为脚本代码被触发执行,漏洞检测数据中的特征检测字符可作为脚本代码标识。当终端检测到漏洞检测数据作为脚本代码被触发执行时,表示终端检测到存储型XSS漏洞,终端将关联网址对应的网页进行网页安全漏洞标记,并根据检测结果对存储的漏洞数据进行更新。当终端没有查找到漏洞检测数据或漏洞检测数据没有被触发执行时,终端继续从关联网址集合中读取下一个关联网址,并对下一个关联网址进行网页安全漏洞检测。
[0114] 在本实施中,终端可以通过对响应文档中的超文本文档事件进行触发,并对触发后的文档节点树进行漏洞检测数据查找自动进行网页安全漏洞检测。
[0115] 请参阅图3,图3为一实施例中的漏洞检测装置的示意图,该装置包括:
[0116] 数据拼接模块310,用于将漏洞检测数据拼接至待检测网页的网址中。
[0117] 第一请求模块320,用于根据拼接后的网址向待检测网页对应的第一网站服务器发起网页数据获取请求。
[0118] 响应数据接收模块330,用于接收第一网站服务器返回的与网页数据获取请求对应的响应数据。
[0119] 链接数据获取模块340,用于获取网址的源数据。
[0120] 关联网址获取模块350,用于根据响应数据和源数据得到与网址具有漏洞检测数据传递关系的关联网址集合。
[0121] 第二请求模块360,用于读取关联网址集合中的关联网址,向关联网址对应的第二网站服务器发起请求。
[0122] 响应文档获取模块370,用于获取第二网站服务器返回的响应文档。
[0123] 漏洞检测模块380,用于根据响应文档和漏洞检测数据进行网页安全漏洞检测。
[0124] 在其中一个实施例中,关联网址获取模块350可以包括:
[0125] 跳转表获取模块,用于当响应数据为对象标记数据时,获取跳转关键字表。
[0126] 字符对匹配模块,用于从对象标记数据中查找与跳转关键字表中的跳转关键字相匹配的字符对。
[0127] 跳转网址生成模块,用于根据查找出的字符对生成跳转网址。
[0128] 源网址获取模块,用于获取源数据中的源网址。
[0129] 第一集合生成模块,用于根据跳转网址和源网址生成关联网址集合。
[0130] 在其中一个实施例中,关联网址获取模块350可以包括:
[0131] 跳转标签提取模块,用于当响应数据为超文本文档时,从响应数据中提取出网址跳转标签。
[0132] 跳转网址生成模块,用于根据拼接后的网址与网址跳转标签生成目标跳转网址。
[0133] 源网址获取模块,用于获取源数据中的源网址。
[0134] 第二集合生成模块,用于根据目标跳转网址和源网址生成关联网址集合。
[0135] 在其中一个实施例中,关联网址获取模块350可以包括:
[0136] 事件触发模块,用于当响应数据为超文本文档且超文本文档中不存在网址跳转标签时,触发超文本文档事件得到第一文档节点树。
[0137] 节点网址提取模块,用于从第一文档节点树中各节点的标签值中提取出节点网址。
[0138] 源网址获取模块,用于获取源数据中的源网址。
[0139] 第三集合生成模块,用于根据节点网址和源网址生成关联网址集合。
[0140] 在其中一个实施例中,漏洞检测模块380可以包括:
[0141] 节点树生成模块,用于触发所述响应文档中的超文本文档事件得到第二文档节点树;
[0142] 数据查找模块,用于检测所述第二文档节点树中各节点的节点数据中是否存在所述漏洞检测数据。
[0143] 执行检测模块,用于当节点数据中存在所述漏洞检测数据时,检测所述漏洞检测数据是否被触发执行。
[0144] 漏洞标记模块,用于当所述漏洞检测数据被执行时,将所述关联网址对应的网页进行网页安全漏洞标记。
[0145] 关于漏洞检测装置的具体限定可以参见上文中对于漏洞检测方法的限定,在此不再赘述。上述漏洞检测装置中的各个模块可全部或部分通过软件、硬件及其组合来实现。上述各模块可以硬件形式内嵌于或独立于计算机设备中的处理器中,也可以以软件形式存储于计算机设备中的存储器中,以便于处理器调用执行以上各个模块对应的操作。该处理器可以为中央处理单元(CPU)、微处理器、单片机等。上述漏洞检测装置可以实现为一种计算机程序的形式。
[0146] 在一个实施例中,提供了一种计算机设备,该计算机设备可以是终端,也可以是服务器。当该计算机设备为服务器时,其内部结构图可以如图4所示。该计算机设备包括通过系统总线连接的处理器、存储器和网络接口。其中,该计算机设备的处理器用于提供计算和控制能力。该计算机设备的存储器包括非易失性存储介质、内存储器。该非易失性存储介质存储有操作系统和计算机程序。该内存储器为非易失性存储介质中的操作系统和计算机程序的运行提供环境。该计算机设备的网络接口用于与外部的终端通过网络连接通信。该计算机程序被处理器执行时以实现一种漏洞检测方法。本领域技术人员可以理解,图4中示出的结构,仅仅是与本申请方案相关的部分结构的框图,并不构成对本申请方案所应用于其上的计算机设备的限定,具体的计算机设备可以包括比图中所示更多或更少的部件,或者组合某些部件,或者具有不同的部件布置。
[0147] 其中,处理器执行程序时实现以下步骤:将漏洞检测数据拼接至待检测网页的网址中;根据拼接后的网址向待检测网页对应的第一网站服务器发起网页数据获取请求;接收第一网站服务器返回的与网页数据获取请求对应的响应数据;获取网址的源数据;根据响应数据和源数据得到与网址具有漏洞检测数据传递关系的关联网址集合;读取关联网址集合中的关联网址,向关联网址对应的第二网站服务器发起请求;获取第二网站服务器返回的响应文档;根据响应文档和漏洞检测数据进行网页安全漏洞检测。
[0148] 在其中一个实施例中,处理器执行程序实现根据响应数据和源数据得到与网址具有漏洞检测数据传递关系的关联网址集合的步骤时还可以实现:当响应数据为对象标记数据时,获取跳转关键字表;从对象标记数据中查找与跳转关键字表中的跳转关键字相匹配的字符对;根据查找出的字符对生成跳转网址;获取源数据中的源网址;根据跳转网址和源网址生成关联网址集合。
[0149] 在其中一个实施例中,处理器执行程序实现根据响应数据和源数据得到与网址具有漏洞检测数据传递关系的关联网址集合的步骤时还可以实现:当响应数据为超文本文档时,从响应数据中提取出网址跳转标签;根据拼接后的网址与网址跳转标签生成目标跳转网址;获取源数据中的源网址;根据目标跳转网址和源网址生成关联网址集合。
[0150] 在其中一个实施例中,处理器执行程序实现根据响应数据和源数据得到与网址具有漏洞检测数据传递关系的关联网址集合的步骤时还可以实现:当响应数据为超文本文档且超文本文档中不存在网址跳转标签时,触发超文本文档事件得到第一文档节点树;从第一文档节点树中各节点的标签值中提取出节点网址;获取源数据中的源网址;根据节点网址和源网址生成关联网址集合。
[0151] 在其中一个实施例中,处理器执行程序实现根据响应文档和漏洞检测数据进行网页安全漏洞检测的步骤时还可以实现:触发响应文档中的超文本文档事件得到第二文档节点树;检测第二文档节点树中各节点的节点数据中是否存在漏洞检测数据;当节点数据中存在漏洞检测数据时,检测漏洞检测数据是否被触发执行;当漏洞检测数据被执行时,将关联网址对应的网页进行网页安全漏洞标记。
[0152] 上述对于计算机设备的限定可以参见上文中对于漏洞检测方法的具体限定,在此不再赘述。
[0153] 请继续参阅图4,还提供一种计算机可读存储介质,其上存储有计算机程序,如图4中所示的非易失性存储介质,其中,该程序被处理器执行时实现以下步骤:将漏洞检测数据拼接至待检测网页的网址中;根据拼接后的网址向待检测网页对应的第一网站服务器发起网页数据获取请求;接收第一网站服务器返回的与网页数据获取请求对应的响应数据;获取网址的源数据;根据响应数据和源数据得到与网址具有漏洞检测数据传递关系的关联网址集合;读取关联网址集合中的关联网址,向关联网址对应的第二网站服务器发起请求;获取第二网站服务器返回的响应文档;根据响应文档和漏洞检测数据进行网页安全漏洞检测。
[0154] 在其中一个实施例中,该程序被处理器执行根据响应数据和源数据得到与网址具有漏洞检测数据传递关系的关联网址集合的步骤时还可以实现:当响应数据为对象标记数据时,获取跳转关键字表;从对象标记数据中查找与跳转关键字表中的跳转关键字相匹配的字符对;根据查找出的字符对生成跳转网址;获取源数据中的源网址;根据跳转网址和源网址生成关联网址集合。
[0155] 在其中一个实施例中,该程序被处理器执行根据响应数据和源数据得到与网址具有漏洞检测数据传递关系的关联网址集合的步骤时还可以实现:当响应数据为超文本文档时,从响应数据中提取出网址跳转标签;根据拼接后的网址与网址跳转标签生成目标跳转网址;获取源数据中的源网址;根据目标跳转网址和源网址生成关联网址集合。
[0156] 在其中一个实施例中,该程序被处理器执行根据响应数据和源数据得到与网址具有漏洞检测数据传递关系的关联网址集合的步骤时还可以实现:当响应数据为超文本文档且超文本文档中不存在网址跳转标签时,触发超文本文档事件得到第一文档节点树;从第一文档节点树中各节点的标签值中提取出节点网址;获取源数据中的源网址;根据节点网址和源网址生成关联网址集合。
[0157] 在其中一个实施例中,该程序被处理器执行根据响应文档和漏洞检测数据进行网页安全漏洞检测的步骤时还可以实现:触发响应文档中的超文本文档事件得到第二文档节点树;检测第二文档节点树中各节点的节点数据中是否存在漏洞检测数据;当节点数据中存在漏洞检测数据时,检测漏洞检测数据是否被触发执行;当漏洞检测数据被执行时,将关联网址对应的网页进行网页安全漏洞标记。
[0158] 上述对于计算机可读存储介质的限定可以参见上文中对于漏洞检测方法的具体限定,在此不再赘述。
[0159] 本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的程序可存储于一非易失性计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。其中,所述的存储介质可为磁碟、光盘、只读存储记忆体(Read-Only Memory,ROM)等。
[0160] 以上所述实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。
[0161] 以上所述实施例仅表达了本发明的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干变形和改进,这些都属于本发明的保护范围。因此,本发明专利的保护范围应以所附权利要求为准。