一种漏洞查询方法、装置、设备及存储介质与流程

文档序号:32061206发布日期:2022-11-04 23:14阅读:45来源:国知局
一种漏洞查询方法、装置、设备及存储介质与流程

1.本技术涉及安全网络技术领域,尤其涉及一种漏洞查询方法、装置、设备及存储介质。


背景技术:

2.随着数据安全要求以及客户资产保密要求越来严格,基于安全厂商自身的漏洞信息库,以隐私查询的方式向用户提供基本的版本漏洞查询,将成为未来网络安全服务领域越来越重要的一种方式。但是,目前,在基于公开漏洞信息库当中的漏洞数据进行查询时,均是以漏洞为主,这种漏洞信息查询方式虽然很方便进行漏洞信息的维护,但在对于某个确定版本的软件资产进行漏洞信息查询时,通常需要对所有该软件资产相关的漏洞进行全部遍历之后才能确定与该版本关联的漏洞信息。且用户的一条资产漏洞查询请求在进行隐私查询时可能会在安全厂商的服务端数据库当中查询匹配到多个符合查询条件的数据记录,这将对数据通信以及用户端和服务端的计算效率产生极大的影响,会增加通信开销,降低漏洞信息的查询效率。


技术实现要素:

3.本技术实施例提供一种漏洞查询方法、装置、设备及存储介质,用于在降低通信开销的同时,提高漏洞信息的查询效率。
4.第一方面,本技术提供一种漏洞查询方法,所述方法包括:
5.根据用户输入的目标系统的目标版本号,从目标版本漏洞映射表中,获取所述目标版本号的所有漏洞标识符;其中,所述目标系统具有至少一个版本号,所述目标版本漏洞映射表是对所述目标系统的各个版本号对应的漏洞标识符进行汇总获得的,且所述目标版本漏洞映射表中包含多条数据,所述目标版本号的所有漏洞标识符为所述目标版本漏洞映射表中的一条数据,一个漏洞标识符对应一种漏洞信息。
6.在本技术实施例中,将“以漏洞为主”的漏洞信息查询方式转换为“以版本号为主”的漏洞信息查询方式,进而,在进行漏洞信息查询时,便可以直接根据用户输入的目标系统的目标版本号,来从目标版本漏洞映射表中,获取目标版本号的所有漏洞标识符,其中,该目标版本漏洞映射表是对目标系统的各个版本号对应的漏洞标识符进行汇总获得的,避免了现有技术中需要全部遍历才能确定出某一版本号的所有漏洞信息,极大降低了通信开销,提高了漏洞信息的查询效率。
7.第二方面,本技术提供一种漏洞查询装置,所述装置包括:
8.漏洞标识符获取单元,用于根据用户输入的目标系统的目标版本号,从目标版本漏洞映射表中,获取所述目标版本号的所有漏洞标识符;其中,所述目标系统具有至少一个版本号,所述目标版本漏洞映射表是对所述目标系统的各个版本号对应的漏洞标识符进行汇总获得的,且所述目标版本漏洞映射表中包含多条数据,所述目标版本号的所有漏洞标识符为所述目标版本漏洞映射表中的一条数据,一个漏洞标识符对应一种漏洞信息。
9.在一种可能的实施方式中,所述装置还包括目标版本漏洞映射表获取单元,其中,所述目标版本漏洞映射表获取单元,用于:
10.对所述目标系统的原始数据进行预处理,获得第一版本漏洞映射表;其中,所述第一版本漏洞映射表中包含多个原始版本号区间和多个漏洞标识符,一个漏洞标识符与至少一个原始版本号区间相映射;所述原始版本号区间包含单个版本号或多个连续的版本号;
11.对所述第一版本漏洞映射表中各个版本号对应的漏洞标识符进行汇总,并对所述各个版本号进行版本号区间构建,获得所述目标版本漏洞映射表。
12.在一种可能的实施方式中,所述目标版本漏洞映射表获取单元,具体用于:
13.对所述第一版本漏洞映射表中的各个原始版本号区间的左、右端点版本号进行升序排序,获得所述目标系统的版本号排序表;
14.根据所述版本号排序表中的各个版本号的排序,以及各个版本号各自对应的漏洞标识符,获得第二版本漏洞映射表;其中,所述第二版本漏洞映射表包括多个版本号和多个漏洞标识符,一个版本号与至少一个漏洞标识符相映射或不与标识符相映射;
15.依次对所述第二版本漏洞映射表中的任两个相邻版本号进行版本号区间构建,获得所述目标版本漏洞映射表。
16.在一种可能的实施方式中,所述目标版本漏洞映射表获取单元,具体用于:
17.针对所述任两个相邻版本号,执行如下过程:
18.确定是否遍历完所述版本号排序表中的所有版本号;
19.若确定未遍历完所有版本号,则确定所述任两个相邻版本号各自对应的漏洞标识符是否相同;
20.若确定所述任两个相邻版本号各自对应的漏洞标识符相同,则确定由所述任两个相邻版本号构建获得的第一待合并区间的第一右端点版本号与所述第一右端点版本号相邻的下一版本号各自对应的漏洞标识符是否相同,以及,确定由所述第一右端点版本号与所述第一右端点版本号相邻的下一版本号所构成的区间是否为任一原始版本号区间的子区间;
21.若确定漏洞标识符不相同,则根据前导区间的类型,判断所述第一待合并区间的类型。
22.在一种可能的实施方式中,所述目标版本漏洞映射表获取单元,具体用于:
23.若第一右端点版本号与所述第一右端点版本号相邻的下一版本号各自对应的漏洞标识符相同,且由所述第一右端点版本号与所述第一右端点版本号相邻的下一版本号所构成的区间为任一原始版本号区间子区间,则将所述第一待合并区间的第一右端点版本号更新为第一右端点版本号相邻的下一版本号,得到第二待合并区间,并再次确定是否遍历完所述版本号排序表中的所有版本号;
24.否则,则根据所述前导区间的类型,判断所述第一待合并区间的类型。
25.在一种可能的实施方式中,所述目标版本漏洞映射表获取单元,具体用于:
26.若确定未遍历完所有版本号,则确定所述第二待合并区间的第二左、右端点版本号各自对应的漏洞标识符是否相同;
27.若确定所述第二左、右端点版本号各自对应的漏洞标识符相同,则确定所述第二右端点版本号与所述第二右端点版本号相邻的下一版本号各自对应的漏洞标识符是否相
同,以及,确定由所述第二右端点版本号与所述第二右端点版本号相邻的下一版本号所构成的区间是否为任一原始版本号区间的子区间;
28.否则,则根据所述前导区间的类型,判断所述第二待合并区间的类型。
29.在一种可能的实施方式中,所述目标版本漏洞映射表获取单元,具体用于:
30.若所述前导区间的类型为闭区间,则依次判断所述第一待合并区间是否符合左开右闭区间或开区间的构建条件中的任一条件;
31.若所述前导区间的类型为左闭右开区间,则依次判断所述第一待合并区间是否符合左闭右开闭区间、闭区间或单独版本号节点的构建条件中的任一条件;
32.若所述前导区间的类型为左开右闭区间,则依次判断所述第一待合并区间是否符合左开右闭区间或开区间的构建条件中的任一条件;
33.若所述前导区间的类型为开区间,则依次判断所述第一待合并区间是否符合闭区间、左闭右开区间或单独版本号节点的构建条件中的任一条件;
34.在一种可能的实施方式中,所述左开右闭区间的构建条件包括判断所述前导区间的类型是否为单独版本号节点、闭区间或左开右闭区间中的一种、所述第一待合并区间是否为任一原始版本号区间的子区间以及包含所述第一待合并区间的所有原始版本号区间的交集区间对应的漏洞标识符是否包含第一右端点版本号的所有漏洞标识符。
35.在一种可能的实施方式中,所述开区间的构建条件包括判断所述前导区间的类型是否为单独版本号节点、闭区间或左开右闭区间中的一种、所述第一待合并区间是否为任一原始版本号区间的子区间以及所述第一待合并区间上对应的漏洞标识符是否为包含所述任第一待合并区间的所有原始版本号区间的交集区间所对应的漏洞标识符。
36.在一种可能的实施方式中,所述左闭右开区间的构建条件包括判断所述前导区间的类型是否为初始起点、单独版本号节点、开区间或左闭右开区间中的一种、所述第一待合并区间是否为任一原始版本号区间的子区间以及包含所述第一待合并区间的所有原始版本号区间的交集区间对应的漏洞标识符是否包含第一左端点版本号的所有漏洞标识符。
37.在一种可能的实施方式中,所述闭区间的构建条件包括判断所述前导区间的类型是否为初始起点、开区间或左闭右开区间中的一种、所述任两个相邻版本号各自对应的漏洞标识符是否相同、所述第一待合并区间是否为任一原始版本号区间的子区间以及包含所述第一待合并区间的所有原始版本号区间的交集区间对应的漏洞标识符是否包含第一左、右端点版本号的所有漏洞标识符。
38.在一种可能的实施方式中,所述单独版本号节点的构建条件包括判断所述前导区间的类型是否为初始起点、单独版本号节点、开区间或左闭右开区间中的一种、所述第一待合并区间是否符合闭区间和左闭右开区间的构建条件中的所有条件以及所述单独版本号节点是否存在对应的漏洞标识符。
39.第三方面,本技术提供计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现上述方面所述的方法的步骤。
40.第四方面,本技术提供一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,所述计算机程序包括程序指令,所述程序指令当被计算机执行时,使所述计算机执行第一方面中任一项所述的方法。
附图说明
41.图1为本技术实施例提供的一种应用场景示意图;
42.图2为本技术实施例提供的漏洞查询方法的一种流程示意图;
43.图3为获取目标系统c的目标版本漏洞映射表的一种流程示意图;
44.图4为金融软件b的“以漏洞为主”的漏洞信息查询方式的一种示意图;
45.图5为获取目标系统c的目标版本漏洞映射表的另一种流程示意图;
46.图6为本技术实施例提供的构建版本号区间的一种流程示意图;
47.图7为本技术实施例提供的版本号区间合并的示意图一;
48.图8为本技术实施例提供的版本号区间合并的示意图二;
49.图9为本技术实施例提供的构建版本号区间的另一种流程示意图;
50.图10为本技术实施例提供的版本号区间合并的示意图三;
51.图11为本技术实施例提供的版本号区间合并的示意图四;
52.图12为本技术实施例提供的版本号区间合并的示意图五;
53.图13为本技术实施例提供的版本号区间合并的示意图六;
54.图14为本技术实施例提供的版本号区间合并的示意图七;
55.图15为本技术实施例提供的版本号区间合并的示意图八;
56.图16为本技术实施例提供的版本号区间合并的示意图九;
57.图17为本技术实施例提供的版本号区间合并的示意图十;
58.图18为本技术实施例提供的漏洞查询装置的一种结构示意图;
59.图19为本技术实施例提供的计算机设备的一种结构示意图。
具体实施方式
60.为使本发明的目的、技术方案和优点更加清楚明白,下面将结合本发明实施例中的附图,对本技术实施例中的技术方案进行清楚、完整地描述。
61.目前,在网络安全领域,各大网络安全厂商面在进行相应的资产(如软件、系统等)漏洞查询与梳理时,会向用户提供的一项基本的安全服务,例如,基于网络资产的版本信息从公开的漏洞信息库(如cve)以及私有的漏洞信息库当中进行相应的资产漏洞查询与梳理。且随着数据安全要求以及客户资产保密要求越来严格,基于安全厂商自身的漏洞信息库,以隐私查询的方式向用户提供基本的版本漏洞查询,将成为未来网络安全服务领域越来越重要的一种方式。在漏洞隐私查询过程中,用户通常不希望自己查询的具体的漏洞信息被服务提供商所获知,且用户服务商也不希望用户获取其所要查询的漏洞之外的其他漏洞信息,因此,现目前出现了使用如不经意传输、同态加密等隐私查询技术来实现隐私场景下的漏洞数据查询,然而,这些隐私查询技术虽然可以使漏洞数据以隐私状态进行查询,但是这些隐私查询技术均是以漏洞为主,在对于某个确定版本的软件资产进行漏洞信息查询时,通常需要对所有该软件资产相关的漏洞进行全部遍历之后才能确定与该版本关联的漏洞信息,且用户的一条资产漏洞查询请求在进行隐私查询时可能会在安全厂商的服务端数据库当中查询匹配到多个符合查询条件的数据记录,这将对数据通信以及用户端和服务端的计算效率产生极大的影响,会增加通信开销,降低漏洞信息的查询效率。
62.为了提高漏洞信息的查询效率,本技术实施例提供了一种漏洞查询方法,在该方
法中,将“以漏洞为主”的漏洞信息查询方式转换为“以版本号为主”的漏洞信息查询方式,进而在进行漏洞信息查询时,便可以直接根据用户输入的目标系统的目标版本号,来从目标版本漏洞映射表中,获取目标版本号的所有漏洞标识符,其中,该目标版本漏洞映射表是对目标系统的各个版本号对应的漏洞标识符进行汇总获得的,避免了现有技术中需要全部遍历才能确定出某一版本号的所有漏洞信息,极大降低了通信开销,提高了漏洞信息的查询效率。
63.在介绍完本技术实施例的设计思想之后,下面对本技术实施例的技术方案能够适用的应用场景做一些简单介绍,需要说明的是,以下介绍的应用场景仅用于说明本技术实施例而非限定。在具体实施过程中,可以根据实际需要灵活地应用本技术实施例提供的技术方案。
64.如图1所示,为本技术实施例提供的一种应用场景示意图。该应用场景中可以包括漏洞查询设备10、用户终端11。
65.漏洞查询设备10可以是为漏洞查询过程提供数据存储与数据计算的服务器,其可以是独立的物理服务器,也可以是多个物理服务器构成的服务器集群或者分布式系统,还可以是提供云服务、云数据库、云计算、云函数、云存储、网络服务、云通信、中间件服务、域名服务、安全服务、cdn、以及大数据和人工智能平台等基础云计算服务的云服务器,但并不局限于此。该漏洞查询设备10可以包括一个或多个处理器101、存储器102以及与其他设备交互的i/o接口103等。此外,漏洞查询设备10还可以配置数据库104,数据库104可以用于存储本技术实施例提供的方案中涉及到的目标版本漏洞映射表等对应的数据。其中,漏洞查询设备10的存储器102中可以存储本技术实施例提供的漏洞查询方法的程序指令,这些程序指令被处理器101执行时能够用以实现本技术实施例提供的漏洞查询方法的步骤,以在降低通信开销的同时,提高漏洞信息的查询效率。
66.用户终端11可以是能够输入的目标系统的目标版本号的设备,例如手机和笔记本电脑等设备。
67.在一种可能的实施方式中,以用户1查询版本号为2.0.0.0的办公系统a的所有漏洞信息为例,则当漏洞查询设备10通过i/o接口103检测到用户在用户终端11上输入的办公系统a的为2.0.0.0的版本号时,该漏洞查询设备10的处理器101会运行存储器102中存储的漏洞查询方法的程序指令,从而,在降低通信开销的同时,提高漏洞信息的查询效率。
68.当然,本技术实施例提供的方法并不限用于图1所示的应用场景中,还可以用于其他可能的应用场景,本技术实施例并不进行限制。对于图1所示的应用场景的各个设备所能实现的功能将在后续的方法实施例中一并进行描述,在此先不过多赘述。下面,将结合附图对本技术实施例的方法进行介绍。
69.如图2所示,为本技术实施例提供的漏洞查询方法的一种流程示意图,该方法可以通过图1中的漏洞查询设备10来执行,该方法的流程介绍如下。
70.步骤201:根据用户输入的目标系统的目标版本号,从目标版本漏洞映射表中,获取目标版本号的所有漏洞标识符。
71.在本技术实施例中,目标系统具有至少一个版本号,目标版本漏洞映射表是对目标系统的各个版本号对应的漏洞标识符进行汇总获得的,且为了便于查询,在本技术中,可以将每一版本号对应的所有漏洞标识符预设置为一条数据,进而,该目标版本漏洞映射表
中可以包含多条数据,而目标版本号的所有漏洞标识符为目标版本漏洞映射表中的一条数据,一个漏洞标识符对应一种漏洞信息。
72.在实际应用中,目标系统可以为各种软件或者系统,例如,金融app、短信app、摄像app以及办公系统等,漏洞标识符可以为漏洞id,每一个目标系统分别各自对应一个目标版本漏洞映射表,当然,也可以多个不同系统对应同一个目标版本漏洞映射表,即,该目标版本漏洞映射表中包括这些不同系统的版本号和漏洞标识符等信息。
73.假设用户2要对金融软件b为5.2.4的版本号进行漏洞信息查询,如表1所示,为金融软件b的目标版本漏洞映射表的一种示意表。其中,null表示“空”,即,不存在对应的漏洞标识符,该表1所示的目标版本漏洞映射表为金融软件b单独对应的目标版本漏洞映射表。进而,用户2可以在用户终端11上输入金融软件b的版本号5.2.4,然后,基于漏洞查询设备10,则可以从如表1的金融软件b的目标版本漏洞映射表中查询出,版本号5.2.4位于版本号区间[5.2.0,5.2.4]范围内,因此,版本号5.2.4所对应的漏洞标识符为2,3,4,进而,用户可以根据漏洞标识符2,3,4获知版本号为5.2.4的所有漏洞信息。
[0074]
表1
[0075]
版本号区间漏洞标识符[0,5.2.0)2,3[5.2.0,5.2.4]2,3,4(5.2.4,5.3.0)2,3[5.3.0,5.3.1]2,3,4(5.3.1,5.3.3)2,35.3.31,2(5.3.3,5.3.5)25.3.5null5.41
[0076]
在一种可能的实施方式中,在本技术实施例中,在从目标版本漏洞映射表中确定出目标版本的所有漏洞标识符之前,还需要将现有的“以漏洞为主”的漏洞信息查询方式转换为“以版本号为主”的漏洞信息查询方式的目标版本漏洞映射表,且,为了便于目标版本漏洞映射表,在本技术实施例中,还可以先按照系统为分组依据,来分别获取各个系统各自对应的目标版本漏洞映射表,即,进而,将漏洞信息库中的所有版本号与漏洞信息均转换完成。由于各个系统获取目标版本漏洞映射表的过程相同,因此,下面以获取目标系统c的目标版本漏洞映射表为例进行详细介绍,如图3所示,为获取目标系统c的目标版本漏洞映射表的一种流程示意图,具体流程介绍如下。
[0077]
步骤301:对目标系统c的原始数据进行预处理,获得第一版本漏洞映射表。
[0078]
在本技术实施例中,第一版本漏洞映射表中可以包含多个原始版本号区间和多个漏洞标识符,一个漏洞标识符与至少一个原始版本号区间相映射;原始版本号区间可以包含单个版本号或多个连续的版本号。
[0079]
在实际应用中,继续以上述金融软件b为例,如图4所示,为金融软件b的“以漏洞为主”的漏洞信息查询方式的一种示意图,可以看出,在“以漏洞为主”的漏洞信息查询方式进行数据存储时,若是用户需要查询金融软件b的版本号为5.3.1的所有漏洞信息时,则需要
将漏洞标识符1,2,3,4均遍历一遍,才能确定出版本号为5.3.1的所有漏洞标识符为2,3,4。进而,在本技术实施例中,首先,可以将图4所示的金融软件b的原始数据进行初步数据提取,然后,可以将金融软件b的这些提取出的数据转存为数据框形式,如表2所示,为金融软件b的第一版本漏洞映射表的一种示意表。
[0080]
表2
[0081]
软件名称版本号区间漏洞标识符金融软件b5.3.31金融软件b5.41金融软件b[0,5.3.3)3金融软件b[0,5.3.5)2金融软件b[5.2.0,5.2.4]4金融软件b[5.3.0,5.3.1]4
[0082]
其中,在将提取出的数据转存为表2所示的数据框形式时,版本号是按照版本号区间的形式划分的,例如,0至5.3.4之间的版本号均具有漏洞标识符2,因此,在该表2中,漏洞标识符2对应的版本号区间为[0,5.3.5)。特别的,由于漏洞标识符1对应的版本号仅为5.3.3和5.4这个2个版本号,而5.3.3至5.4之间的版本号并不具有漏洞标识符1,因此,在将金融软件b的原始数据转换为表2所示的数据框形式时,版本号5.3.3和版本号5.4并没有组成版本号区间,而是分别设置于不同行,漏洞标识符4与漏洞标识符1类似,由于5.2.4至5.3.4之间的版本号并不具有漏洞标识符4,因此,版本号区间[5.2.0,5.2.4]和版本号区间[5.3.0,5.3.1]分别设置于不同行。
[0083]
步骤302:对第一版本漏洞映射表中各个版本号对应的漏洞标识符进行汇总,并对各个版本号进行版本号区间构建,获得目标版本漏洞映射表。
[0084]
在实际应用中,继续以上述金融软件b为例,可以将如表2所示的第一版本漏洞映射表中各个版本号对应的漏洞标识符进行汇总,例如,版本号0的所有漏洞标识符为2和3,版本号为5.2.0的所有漏洞标识符为2,3,4等等,在将所有版本号对应的漏洞标识符均进行汇总归纳之后,对各个版本号进行版本号区间构建,即,将版本号依旧按照版本号区间的形式进行划分,从而,获得如表1所示的目标版本漏洞映射表,在该目标版本漏洞映射表中,同一版本号区间中的版本号,具有相同的漏洞标识符。
[0085]
在一种可能的实施方式中,在根据第一版本漏洞映射表得到目标版本漏洞映射表的过程中,为了便于查看与统计汇总,在本技术实施例中,还可以将对目标系统的版本号进行升序排序,并依据这些版本号与各个漏洞标识符之间对应关系,建立对应各个版本号的第二版本漏洞映射表,然后再基于第二版本漏洞映射表,来获取目标版本漏洞映射表。同样的,由于各个系统获取第二版本漏洞映射表的过程相同,因此,下面以获取目标系统c的第二版本漏洞映射表为例进行详细介绍,如图5所示,为获取目标系统c的目标版本漏洞映射表的另一种流程示意图,具体流程介绍如下。
[0086]
步骤501:对第一版本漏洞映射表中的各个原始版本号区间的左、右端点版本号进行升序排序,获得目标系统的版本号排序表。
[0087]
在实际应用中,继续以上述金融软件b为例,可以对如表2所示的第一版本漏洞映射表中的各个原始版本号区间的左、右端点版本号进行升序排序,来获得目标系统的版本
号排序表,如表3所示,为金融软件b的版本号排序表的一种示意表。当然了,也可以对如表2所示的第一版本漏洞映射表中的各个原始版本号区间的左、右端点版本号进行降序排序,来获得目标系统的版本号排序表。
[0088]
表3
[0089]
软件名称版本号金融软件b[0,5.2.0,5.2.4,5.3.0,5.3.1,5.3.3,5.3.5,5.4]
[0090]
步骤502:根据版本号排序表中的各个版本号的排序,以及各个版本号各自对应的漏洞标识符,获得第二版本漏洞映射表。
[0091]
在本技术实施例中,第二版本漏洞映射表包括多个版本号和多个漏洞标识符,一个版本号与至少一个漏洞标识符相映射或不与标识符相映射。继续以上述金融软件b为例,如表4所示,为金融软件b的第二版本漏洞映射表的一种示意表。其中,该第二版本漏洞映射表的每一行仅有一个版本号以及该版本号对应的漏洞标识符。
[0092]
表4
[0093]
软件名称端点版本号漏洞标识符金融软件b02,3金融软件b5.2.02,3,4金融软件b5.2.42,3,4金融软件b5.3.02,3,4金融软件b5.3.12,3,4金融软件b5.3.31,2金融软件b5.3.5null金融软件b5.41
[0094]
步骤503:依次对第二版本漏洞映射表中的任两个相邻版本号进行版本号区间构建,获得目标版本漏洞映射表。
[0095]
在本技术实施例中,由于第二版本漏洞映射表中的任两个相邻版本号的版本号区间构建过程相同,因此,下面以相邻的版本号1和版本号2构建版本号区间为例进行详细介绍,如图6所示,为本技术实施例提供的构建版本号区间的一种流程示意图,具体流程介绍如下。
[0096]
步骤601:确定是否遍历完版本号排序表中的所有版本号。
[0097]
在本技术实施例中,可以预先对前导区间指示变量进行定义,如表5所示,为本技术实施例提供的前导区间指示变量的一种示意表。其中,前导区间是指待合并区间的上一个已经合并的区间,且前导区间具有初始起点、单独版本号节点、闭区间、开区间、左闭右开区间以及左开右闭区间这6种类型。
[0098]
表5
[0099][0100]
进而,在本技术实施例中,在进行区间合并的初始时,可以先进行参数初始化,具体的,可以将前导版本号区间指示变量初始化为-1,以及将待合并区间左、右端点指针均初始化为0。
[0101]
在实际应用中,继续以上述金融软件b为例,针对表3中的各个版本号,可以依次从左至右进行区间合并判断,即,不断的迭代区间合并过程,直至将表3中的所有版本号均遍历完成,从而,得到如表1所示的金融软件b的目标版本漏洞映射表。
[0102]
步骤602:若确定未遍历完所有版本号,则确定相邻的版本号1和版本号2各自对应的漏洞标识符是否相同。
[0103]
由于同一版本号区间中的各个版本号具有相同的漏洞标识符,因此,在本技术实施例中,为了判断相邻的版本号1和版本号2是否能够构成版本号区间,可以通过确定版本号1和版本号2各自对应的漏洞标识符是否相同来确定版本号1和版本号2是否能够构成版本号区间。
[0104]
步骤603:若确定相邻的版本号1和版本号2各自对应的漏洞标识符相同,则确定由版本号1和版本号2构建获得的第一待合并区间的第一右端点版本号与第一右端点版本号相邻的下一版本号各自对应的漏洞标识符是否相同,以及,确定由第一右端点版本号与第一右端点版本号相邻的下一版本号所构成的区间是否为任一原始版本号区间的子区间。
[0105]
在本技术实施例中,为了便于对版本号区间合并过程进行解释说明,在判断版本号2的相邻的下一版本号3是否能够合并至由版本号1和版本号2构建获得的第一待合并区间时,可以采用“指针”的形式来对版本号区间合并的迭代过程进行处理,具体的,可以通过如下4个递进判断的“右指针移动”条件来判断是否能够进行版本号合并:
[0106]
条件1:右指针当前指向的版本号对应的漏洞标识符,与右指针移动后指向的版本号对应的漏洞标识符相同;
[0107]
条件2:右指针当前指向的版本号与右指针移动后指向的版本号所构成的左闭右开区间或闭区间,为任一原始版本号区间的子区间;
[0108]
条件3:包含第一待合并区间的所有原始版本号区间的交集区间对应的漏洞标识符包含第一待合并区间上的所有漏洞标识符;
[0109]
条件4:左指针指向的版本号与右指针移动后指向的版本号,同样满足上述的条件1-3。
[0110]
在实际应用中,在当由版本号1和版本号2构建获得的第一待合并区间完全满足上述4个条件时,则可以将右指针向右移动一格,即,第一待合并区间可以被成功构建,且,可以进一步判断下一个版本号是否可以合并至该第一待合并区间中,当然了,若不满足上述4个条件中的任一条件时,则不能移动右指针。如图7所示,为本技术实施例提供的版本号区间合并的示意图一,假设版本号1为5.2.0,版本号2为5.2.4,那么根据表4可知5.2.0的漏洞标识符为《2,3,4》,5.2.4的漏洞标识符也为《2,3,4》,即,版本号5.2.0和版本号5.2.4各自对应的漏洞标识符相同,进而,可以再判断版本号5.2.0和版本号5.2.4是否满足上述4个“右指针移动”条件。
[0111]
步骤604:若确定漏洞标识符不相同,则根据前导区间的类型,判断第一待合并区间的类型。
[0112]
在实际应用中,如图8所示,为本技术实施例提供的版本号区间合并的示意图二,假设当前处于版本号区间合并的起始状态下,版本号1为0,版本号2为5.2.0,那么根据表4可知0的漏洞标识符为《2,3》,5.2.0的漏洞标识符也为《2,3,4》,即,版本号0和版本号5.2.0各自对应的漏洞标识符不相同,进而,可以进一步根据版本号0和版本号5.2.0所构成的第一待合并区间的前导区间的类型,来判断该第一待合并区间的类型。具体的,例如,可以通过如下的构建“左闭右开区间”条件来判断第一待合并区间的类型:
[0113]
前置条件:第一待合并区间的前导区间的类型为初始起点、单独版本号节点、开区间或左闭右开区间中的一种;
[0114]
条件1:第一待合并区间为任一原始版本号区间的子区间;
[0115]
条件2:包含所述第一待合并区间的所有原始版本号区间的交集区间对应的漏洞标识符包含第一左端点版本号的所有漏洞标识符。
[0116]
继续沿用前述例子,假设版本号1为0,版本号2为5.2.0,由于第一待合并区间的前导区间的左、右端点版本号均为0,即,该第一待合并区间的前导区间的类型为初始起点,因此,版本号0和版本号5.2.0满足构建“左闭右开区间”条件中的前置条件;继而,针对构建“左闭右开区间”条件中的条件1,由于版本号0和版本号5.2.0所构成的左闭右开区间[0,5.2.0)为原始版本号区间[0,5.3.3)和原始版本号区间[0,5.3.5)的子区间,因此,版本号0和版本号5.2.0满足条件1;进而,针对构建“左闭右开区间”条件中的条件2,由于原始版本号区间[0,5.3.3)与原始版本号区间[0,5.3.5)包含由版本号0与5.2.0所构成的左闭右开区间[0,5.2.0),且原始版本号区间[0,5.3.3)与原始版本号区间[0,5.3.5)的交集区间为[0,5.3.3),该版本号区间[0,5.3.3)对应的漏洞标识符为《2,3》,而由版本号0与5.2.0所构成的左闭右开区间[0,5.2.0)的第一左端点版本号0的所有漏洞标识符也为《2,3》,即,交集
区间[0,5.3.3)的漏洞标识符《2,3》包含有第一待合并区间的第一左端点版本号0的所有漏洞标识符《2,3》,因此,版本号0和版本号5.2.0同样满足条件2。也就是说,版本号0与5.2.0满足构建“左闭右开区间”的所有条件,因此,可版本号0与5.2.0所构成的第一待合并区间的类型为左闭右开区间,即,如图7所示,根据版本号0与5.2.0可构建新的版本号区间:左闭右开区间[0,5.2.0),且,该左闭右开区间[0,5.2.0)对应的漏洞标识符为《2,3》。此外,在构建完新的版本号区间之后,为了对表3中的各个版本号进行迭代处理,还需要对指示变量与指针更新,具体的,在构建完新的版本号区间之后,将指示版本号0的左指针与指示版本号5.2.0的右指针均向右移动一位,即,从如图8所示的指示情况变为了如图7所示的指示情况。
[0117]
在一种可能的实施方式中,在本技术实施例中,在进行“右指针移动”条件判断时,若第一待合并区间的第一右端点版本号与第一右端点版本号相邻的下一版本号各自对应的漏洞标识符相同,且由第一右端点版本号与第一右端点版本号相邻的下一版本号所构成的区间为任一原始版本号区间子区间,即,满足“右指针移动”条件中的4个条件时,因此,可以将第一待合并区间的第一右端点版本号更新为第一右端点版本号相邻的下一版本号,以得到第二待合并区间,并再次确定是否遍历完版本号排序表中的所有版本号。
[0118]
在实际应用中,假设版本号1为5.2.0,版本号2为5.2.4,原始版本号区间[0,5.3.3)对应的漏洞标识符为《3,4》,原始版本号区间[0,5.3.5)对应的漏洞标识符为《2》,那么采用“右指针移动”条件对版本号5.2.0和5.2.4可进行如下判断:
[0119]
针对条件1,由于右指针当前所指向的版本号为5.2.4,该版本号5.2.4对应的漏洞标识符为《2,3,4》,右指针移动后指向的版本号为5.3.0,而该版本号5.3.0对应的漏洞标识符也为《2,3,4》,即,右指针当前指向的版本号5.2.4对应的漏洞标识符,与右指针移动后指向的版本号5.3.0对应的漏洞标识符相同,也就是说,版本号5.2.0和版本号5.2.4满足条件1。
[0120]
针对条件2,版本号5.2.4与5.3.0所构成的左闭右开区间[5.2.4,5.3.0)或闭区间[5.2.4,5.3.0]为原始版本号区间[0,5.3.3)和原始版本号区间[0,5.3.5)的子区间,因此,版本号5.2.0和版本号5.2.4满足条件2。
[0121]
针对条件3,由于原始版本号区间[0,5.3.3)与原始版本号区间[0,5.3.5)包含由版本号5.2.0与5.2.4所构成的第一待合并区间,且原始版本号区间[0,5.3.3)与原始版本号区间[0,5.3.5)的交集区间为[0,5.3.3),该版本号区间[0,5.3.3)对应的漏洞标识符为原始版本号区间[0,5.3.3)与原始版本号区间[0,5.3.5)对应漏洞标识符的并集《2,3,4》,该并集《2,3,4》包含由版本号5.2.0和5.2.4所构成的第一待合并区间上的所有漏洞标识符《2,3,4》,因此,版本号5.2.0和版本号5.2.4满足条件3。
[0122]
针对条件4,由于左指针指向的版本号为5.2.0,右指针移动后指向的版本号为5.3.0,因此,针对版本号5.2.0与5.3.0,可以进一步判断出版本号5.2.0与5.3.0满足“右指针移动”条件中的条件1-3,因此,版本号5.2.0和版本号5.2.4满足条件4。
[0123]
也就是说,版本号5.2.0和版本号5.2.4满足“右指针移动”中的所有条件,因此,可以将第一待合并区间的第一右端点版本号5.2.4更新为第一右端点版本号5.2.4相邻的下一版本号5.3.0,以得到由版本号5.2.0和版本号5.3.0所构建的第二待合并区间,即,将由版本号5.2.4与版本号5.3.0所构成的版本号区间与由版本号5.2.0和版本号5.2.4所构建
的第一待合并区间进行了合并。此外,为判断是否迭代完表3中的所有版本号,在得到由版本号5.2.0和版本号5.3.0所构建的第二待合并区间,还需要再次确定是否遍历完表3所示的版本号排序表中的所有版本号。
[0124]
当然,若是版本号1和版本号2不完全满足上述4个“右指针移动”条件,那么则可以根据版本号1和版本号2所构建的第一待合并区间的前导区间的类型,来判断出第一待合并区间的类型。
[0125]
具体的,假设版本号1为5.2.0,版本号2为5.2.4,且该版本号5.2.0和5.2.4所对应漏洞标识符如表4所示,那么可知版本号5.2.0和版本号5.2.4满足条件1和2。继而,针对条件3,由于原始版本号区间[0,5.3.3)与原始版本号区间[0,5.3.5)包含由版本号5.2.0与5.2.4所构成的第一待合并区间,且原始版本号区间[0,5.3.3)与原始版本号区间[0,5.3.5)的交集区间为[0,5.3.3),该版本号区间[0,5.3.3)对应的漏洞标识符为原始版本号区间[0,5.3.3)与原始版本号区间[0,5.3.5)对应漏洞标识符的并集《2,3》,该并集《2,3》不包含版本号5.2.0和版本号5.2.4对应的漏洞标识符《2,3,4》中的漏洞标识符《4》,因此,版本号5.2.0和版本号5.2.4不满足条件3。进而,由于版本号5.2.0和版本号5.2.4不满足条件3,因此,版本号5.2.0和版本号5.2.4不满足“右指针移动”条件,那么此时,则如步骤604所述,以根据版本号1和版本号2所构建的第一待合并区间的前导区间的类型,来判断出第一待合并区间的类型,即,可以通过构建“左闭右开区间”条件来判断第一待合并区间的类型。
[0126]
在一种可能的实施方式中,在得到第二待合并区间,并再次确定是否遍历完版本号排序表中的所有版本号之后,在本技术实施例中,还需要进一步对第二待合并区间进行区间合并判断,如图9所示,为本技术实施例提供的构建版本号区间的另一种流程示意图,具体流程介绍如下。
[0127]
步骤901:若确定未遍历完所有版本号,则确定第二待合并区间的第二左、右端点版本号各自对应的漏洞标识符是否相同。
[0128]
在实际应用中,该步骤901的具体执行过程与步骤602类似,假设第二待合并区间由版本号1和版本号3所构建,即,第二左、右端点版本号分别为版本号1和版本号3,因此,为了判断版本号1和版本号3是否能够构成版本号区间,那么可以通过确定版本号1和版本号3各自对应的漏洞标识符是否相同来确定版本号1和版本号3是否能够构成版本号区间。
[0129]
步骤902:若确定第二左、右端点版本号各自对应的漏洞标识符相同,则确定第二右端点版本号与第二右端点版本号相邻的下一版本号各自对应的漏洞标识符是否相同,以及,确定由第二右端点版本号与第二右端点版本号相邻的下一版本号所构成的区间是否为任一原始版本号区间的子区间。
[0130]
在实际应用中,该步骤902的具体执行过程与步骤603类似,可以通过“右指针移动”条件来判断是否能够将版本号3的相邻的下一版本号4合并至由版本号1和版本号3构建获得的第二待合并区间中。
[0131]
步骤903:否则,则根据前导区间的类型,判断第二待合并区间的类型。
[0132]
在实际应用中,该步骤903的具体执行过程与步骤604类似,可以通过构建“左闭右开区间”条件来判断第二待合并区间的类型。
[0133]
在一种可能的实施方式中,在本技术实施例中,在根据所述前导区间的类型,来判断第一待合并区间的类型时,具体可以通过如下几种方式来进行判断:
[0134]
第一种:若前导区间的类型为闭区间,则依次判断第一待合并区间是否符合左开右闭区间或开区间的构建条件中的任一条件。
[0135]
在本技术实施例时,若前导区间的类型为闭区间,则首先可以判断第一待合并区间是否符合如下的“左开右闭区间”的构建条件:
[0136]
前置条件:前导区间的类型为单独版本号节点、闭区间或左开右闭区间中的一种;
[0137]
条件1:第一待合并区间为任一原始版本号区间的子区间;
[0138]
条件2:包含第一待合并区间的所有原始版本号区间的交集区间对应的漏洞标识符包含第一右端点版本号的所有漏洞标识符。
[0139]
进而,若是第一待合并区间的左、右端点版本号完全满足上述的“左开右闭区间”的构建条件,则可以确定第一待合并区间的类型为左开右闭区间。例如,假设第一待合并区间的左、右端点版本号分别为5.3.1和5.3.3,则针对前置条件,由于由版本号5.3.1和5.3.3所构建的第一待合并区间的前导区间[5.3.0,5.3.1]的类型为闭区间,因此,版本号5.3.1和5.3.3满足“左开右闭区间”的构建条件中的前置条件。进而,针对“左开右闭区间”的构建条件中的条件1,由于版本号5.3.1和5.3.3所构建的左开右闭区间(5.3.1,5.3.3]是原始版本号区间[0,5.3.5)的子区间,因此,版本号5.3.1和5.3.3满足“左开右闭区间”的构建条件中的条件1;进一步的,针对“左开右闭区间”的构建条件中的条件2,如表2所示,只有原始版本号区间[0,5.3.5)这一个原始版本号区间中包含有左开右闭区间(5.3.1,5.3.3],因此,包含第一待合并区间的所有原始版本号区间的交集区间就为[0,5.3.5),其中,由于版本号区间[0,5.3.5)对应的漏洞标识符为《2》,而左开右闭区间(5.3.1,5.3.3]的漏洞标识符为《1,2》,即,版本号区间[0,5.3.5)对应的漏洞标识符并没有完全包含左开右闭区间(5.3.1,5.3.3]的所有漏洞标识符,因此,版本号5.3.1和5.3.3不满足“左开右闭区间”的构建条件中的条件2。也就是所,版本号5.3.1和5.3.3并不能完全满足“左开右闭区间”的构建条件,因此,并不能将版本号5.3.1和5.3.3所构建的第一待合并区间的类型确定为左开右闭区间。
[0140]
进而,当第一待合并区间的左、右端点版本号不满足上述的“左开右闭区间”的构建条件中的任一条件时,可以进一步判断第一待合并区间是否符合如下的“开区间”的构建条件:
[0141]
前置条件:前导区间的类型为单独版本号节点、闭区间或左开右闭区间中的一种;
[0142]
条件1:第一待合并区间为任一原始版本号区间的子区间;
[0143]
条件2:第一待合并区间上对应的漏洞标识符为包含任第一待合并区间的所有原始版本号区间的交集区间所对应的漏洞标识符。
[0144]
继续沿用上述例子,假设第一待合并区间的左、右端点版本号分别为5.3.1和5.3.3,那么,根据前述内容可知,版本号5.3.1和5.3.3同样满足“开区间”的构建条件中的前置条件和条件1。进而,针对“开区间”的构建条件中的条件2,如表2所示,原始版本号区间[0,5.3.3)和原始版本号区间[0,5.3.5)中均包含有开区间(5.3.1,5.3.3),且原始版本号区间[0,5.3.3)和原始版本号区间[0,5.3.5)的交集区间为[0,5.3.3),该版本号区间[0,5.3.3)的漏洞标识符为《2,3》,开区间(5.3.1,5.3.3)的漏洞标识符同样为《2,3》,继而,可见开区间(5.3.1,5.3.3)的漏洞标识符为原始版本号区间[0,5.3.3)和原始版本号区间[0,5.3.5)的交集区间[0,5.3.3)的漏洞标识符相同,因此,版本号5.3.1和5.3.3符合上述的“开区间”的构建条件,如图10所示,为本技术实施例提供的版本号区间合并的示意图三,可基于版本号5.3.1和5.3.3构建开区间(5.3.1,5.3.3),且该开区间(5.3.1,5.3.3)对应的漏洞标识符为《2,3》,同时,更新指示变量与左右指针,即,将左指针由指向版本号5.3.1更新为指向版本号5.3.3,右指针由指向版本号5.3.3更新为指向版本号5.3.5。
[0145]
第二种:若前导区间的类型为左闭右开区间,则依次判断第一待合并区间是否符合左闭右开闭区间、闭区间或单独版本号节点的构建条件中的任一条件。
[0146]
在本技术实施例时,若前导区间的类型为左闭右开区间,则首先可以判断第一待合并区间的左、右端点版本号是否完全满足前述的“左闭右开区间”的构建条件,若是满足,则可以确定第一待合并区间的类型为左闭右开区间。例如,假设第一待合并区间的左、右端点版本号分别为0和5.2.0,进而,基于表4中所示的版本号0和5.2.0的漏洞标识符以及前述的“左闭右开区间”的构建条件,可知版本号0和5.2.0满足构建“左闭右开区间”的所有条件,因此,由版本号0与5.2.0所构成的第一待合并区间的类型为左闭右开区间。
[0147]
当然了,若第一待合并区间不满足上述的“左闭右开区间”的构建条件中的任一条件,那么则可以进一步判断第一待合并区间是否符合如下的“闭区间”的构建条件:
[0148]
前置条件:前导区间的类型为初始起点、开区间或左闭右开区间中的一种;
[0149]
条件1:任两个相邻版本号各自对应的漏洞标识符相同;
[0150]
条件2:第一待合并区间为任一原始版本号区间的子区间;
[0151]
条件3:包含第一待合并区间的所有原始版本号区间的交集区间对应的漏洞标识符包含第一左、右端点版本号的所有漏洞标识符。
[0152]
例如,假设第一待合并区间的左、右端点版本号分别为5.3.0和5.3.1,进而,基于表4中所示的版本号5.3.0和5.3.1的漏洞标识符以及前述的“闭区间”的构建条件,可知版本号5.3.0和5.3.1满足构建“闭区间”的所有条件,因此,如图11所示,为本技术实施例提供的版本号区间合并的示意图四,由版本号5.3.0和5.3.1所构成的第一待合并区间的类型为闭区间。
[0153]
当然了,若第一待合并区间不满足上述的“闭区间”的构建条件中的任一条件,那么则可以进一步判断第一待合并区间是否符合如下的“单独版本号节点”的构建条件:
[0154]
前置条件:前导区间的类型为初始起点、单独版本号节点、开区间或左闭右开区间中的一种;
[0155]
条件1:第一待合并区间不符合闭区间和左闭右开区间的构建条件中的所有条件;
[0156]
条件2:单独版本号节点存在对应的漏洞标识符。
[0157]
在本技术实施例中,若是第一待合并区间的左、右端点版本号满足构建“单独版本号节点”的所有条件,那么,则可以将第一待合并区间的类型确定为单独版本号节点。
[0158]
第三种:若前导区间的类型为左开右闭区间,则依次判断第一待合并区间是否符合左开右闭区间或开区间的构建条件中的任一条件。
[0159]
在本技术实施例时,若前导区间的类型为左开右闭区间,则首先可以判断第一待合并区间的左、右端点版本号是否完全满足前述的“左开右闭区间”的构建条件,若是满足,则可以确定第一待合并区间的类型为左开右闭区间。当然了,若第一待合并区间不满足上述的“左开右闭区间”的构建条件中的任一条件,那么则可以进一步判断第一待合并区间是否符合前述的“开区间”的构建条件,若是满足,则可以确定第一待合并区间的类型为开区
间。
[0160]
第四种:若前导区间的类型为开区间,则依次判断第一待合并区间是否符合闭区间、左闭右开区间或单独版本号节点的构建条件中的任一条件。
[0161]
在本技术实施例时,若前导区间的类型为开区间,则首先可以判断第一待合并区间的左、右端点版本号是否完全满足前述的“闭区间”的构建条件,若是满足,则可以确定第一待合并区间的类型为闭区间。然而,若第一待合并区间不满足上述的“闭区间”的构建条件中的任一条件,那么则可以进一步判断第一待合并区间是否符合前述的“左闭右开区间”的构建条件,若是满足,则可以确定第一待合并区间的类型为左闭右开区间。当然了,若第一待合并区间不满足上述的“左闭右开区间”的构建条件中的任一条件,那么则可以进一步判断第一待合并区间是否符合前述的“单独版本号节点”的构建条件,若是满足,则可以确定第一待合并区间的类型为单独版本号节点。
[0162]
在一种可能的实施方式中,在本技术实施例中,具体还可以通过如下方式来对版本号区间进行合并与再划分。
[0163]
step1:进行参数初始化。
[0164]
具体的,可以对前导区间、第一待构建区间左端点指针以及待构建区间右端点指针进行初始化,其中,可以将前导区间的指示变量初始化为-1,将第一待构建区间的左端点指针初始化为0,将第一待构建区间的右端点指针初始化为0。
[0165]
step2:针对版本号排序表中的各个版本号,依次从左到右进行版本号区间构建,其中,指针移动与版本号区间构建规则具体如下:
[0166]
step2.1:判断第一待合并区间的左端点指针(以下简称左指针)和右端点指针(以下简称右指针)指向的版本号的漏洞标识符是否相同;
[0167]
step2.1.1:若漏洞标识符不相同,则依次判断该左、右指针指向的版本号是否满足“左闭右开区间”的构建条件;
[0168]
其中,若满足“左闭右开区间”的构建条件,则对该左、右指针指向的版本号执行区间构建,同时更新由该左、右指针指向的版本号所构建区间的前导区间的指示变量与左、右指针,并结束本次循环,回到step2.1,继续迭代;若不满足“左闭右开区间”的构建条件,则跳转到step2.2。
[0169]
step2.1.2:若漏洞标识符相同,则进一步判断该左、右指针指向的版本号是否满足右指针移动条件;
[0170]
其中,若满足右指针移动条件,则将对右指针进行移动,例如,将右指针向右移动1位,并回到step2.1;
[0171]
若不满足右指针移动条件,则依次判断该左、右指针指向的版本号是否满足闭区间、左闭右开的构建条件,该判断过程与step2.1.1类似。
[0172]
具体的,若满足“闭区间”的构建条件中的前置条件,则可以进一步判断该左、右指针指向的版本号是否满足“闭区间”构建条件中的剩余条件(“闭区间”构建条件中的条件1-3)。若满足“闭区间”构建条件中的剩余条件,则可以基于该左、右指针指向的版本号进行闭区间的构建,同时更新前导区间的指示变量与左、右指针,并结束本次循环,并回到step2.1,继续迭代;若不满足“闭区间”构建条件中的剩余条件,则可以进一步判断该左、右指针指向的版本号是否满足“左闭右开区间”的构建条件。若满足“左闭右开区间”的构建条
件,则可以基于该左、右指针指向的版本号进行左闭右开区间的构建,同时更新前导区间的指示变量与左、右指针,并结束本次循环,回到step2.1,继续迭代;若不满足“左闭右开区间”的构建条件,则跳转到step2.2。
[0173]
若不满足“闭区间”的构建条件中的前置条件,则跳转到step2.2;
[0174]
step2.2:判断左、右指针是否相邻;
[0175]
step2.2.1:若左、右指针不相邻,则将右指针左移回退,然后执行如下操作:
[0176]
若前导区间的类型为初始起点、左闭右开区间、开区间或轮空中的任一种,则可以进一步判断该左、右指针指向的版本号是否满足“闭区间”的构建条件,若满足“闭区间”的构建条件,则可以基于该左、右指针指向的版本号进行闭区间的构建,同时更新前导区间的指示变量与左、右指针,并结束本次循环,回到step2.1,继续迭代;若不满足“闭区间”的构建条件,则可以进一步判断该左、右指针指向的版本号是否满足“左闭右开区间”的构建条件,执行过程参照step2.1.1;
[0177]
若前导区间的类型为其他类型(如左开右闭区间或闭区间),则可以进一步判断该左、右指针指向的版本号是否满足“左开右闭区间”的构建条件,若满足“左开右闭区间”的构建条件,则可以基于该左、右指针指向的版本号进行左开右闭区间的构建,同时更新前导区间的指示变量与左、右指针,并结束本次循环,回到step2.1,继续迭代;若不满足“左开右闭区间”的构建条件,则可以转到step2.2。
[0178]
step2.2.2:若左、右指针相邻,则可以对前导区间的类型进行判断:
[0179]
若前导区间的类型为初始起点、左闭右开区间或开区间中的任一种,则可以进一步判断该左、右指针指向的版本号是否满足“左闭右开区间”的构建条件,若满足左闭右开区间的构建条件,则可以基于该左、右指针指向的版本号进行左闭右开区间的构建,同时更新前导区间的指示变量与左、右指针,并结束本次循环,回到step2.1,继续迭代;若不满足左闭右开区间的构建条件,则可以基于该左、右指针指向的版本号进行“单独的版本节点”的构建,同时更新前导区间的指示变量,并结束本次循环,回到step2.1,继续迭代。进一步的,若该“单独的版本节点”对应的漏洞标识符为空,即不存在对比应的漏洞标识符,那么,该“单独的版本节点”轮空,同时更新前导区间指示变量,并结束本次循环,回到step2.1,继续迭代。
[0180]
若前导区间的类型为其他类型(如左开右闭区间或闭区间),则可以进一步判断该左、右指针指向的版本号是否满足“左开右闭区间”的构建条件,若满足左开右闭区间的构建条件,则可以基于该左、右指针指向的版本号进行左开右闭区间的构建,同时更新前导区间的指示变量与左、右指针,并结束本次循环,回到step2.1,继续迭代;若不满足左开右闭区间的构建条件,则进一步判断该左、右指针指向的版本号是否满足“开区间”的构建条件,若满足开区间构建条件,则可以基于该左、右指针指向的版本号进行开区间的构建,同时更新前导区间的指示变量与左、右指针,并结束本次循环,回到step2.1,继续迭代;若不满足开区间构建条件,则该次判断过程轮空跳过,同时更新左、右指针,回到step2.1,继续迭代。
[0181]
进一步的,在本技术实施例中,为了便于用户理解本技术的版本号区间划分与合并,下面以对表3中的版本号按照版本优先级从低版本向高版本执行合并为例进行详细介绍。
[0182]
假设当前正处于对版本号进行合并判断的起始状态,在该状态下,左指针和右指
针都指向了0版本,首先,可以对右指针进行移动,以得到如图8所示的结果,此时,左指针指向版本号0,右指针指向版本号5.2.0,进而,基于表4所示的端点版本号与漏洞标识符之间的对应关系,可知版本号0和版本号5.2.0分别对应了不同的漏洞标识符,进一步的,执行step2.1.1,判断是否满足“左闭右开区间”的构建条件:由版本号0和版本号5.2.0构成的待合并区间的前导区间指示变量为初始值,因此,满足前置条件;[0,5.2.0)区间是原始版本号区间[0,5.3.3)与[0,5.3.5)的子区间,因此,满足条件1;原始版本号区间[0,5.3.3)与[0,5.3.5)对应的交集区间为[0,5.3.3),其对应的漏洞标识符为《2,3》,其包含了左端点上的漏洞标识符《2,3》,因此,可以构建新的版本号区间[0,5.2.0),该版本号区间对应的漏洞标识符为《2,3》,进一步的,对指示变量与指针进行更新,如图7所示。
[0183]
进一步的,继续执行step2.1,判断版本号5.2.0和5.2.4对应的漏洞标识符是否相同,若相同,则执行step2.1.2,判断是否满足“右指针移动”条件:当前右指针为5.2.4,移动后右指针为5.3.0,它们对应的漏洞标识符均为《2,3,4》,即,右指针当前指向的版本对应的漏洞标识符,与右指针移动后指向的版本对应的漏洞标识符相等,因此,满足条件1;且由版本号5.2.4和5.3.0构成的区间[5.2.4,5.3.0)或[5.2.4,5.3.0]为原始版本号区间[0,5.3.3)和[0,5.3.5)的子区间,因此,满足条件2;但是,由于[0,5.3.3)、[0,5.3.5)与的交集区间为[0,5.3.3),其对应的漏洞标识符为两个原始版本号区间对应漏洞标识符的并集《2,3》,其不包含5.2.4和5.3.0对应的漏洞标识符《2,3,4》中的漏洞标识符《4》,即,不满足条件3;因此,由版本号5.2.0和5.2.4构成的待合并区间并不满足“右指针移动”条件。
[0184]
因此,需要进一步判断版本号5.2.0和5.2.4是否满足“闭区间”的构建条件:由版本号5.2.0和5.2.4构成的待合并区间的前导区间为左闭右开区间,因此,满足前置条件;[5.2.0,5.2.4]是原始版本号区间[0,5.3.3)、[0,5.3.5)和[5.2.0,5.2.4]的子区间,因此,满足条件1;原始版本号区间[0,5.3.3)、[0,5.3.5)和[5.2.0,5.2.4]的子区间的交集区间为[5.2.0,5.2.4],该[5.2.0,5.2.4]对应的漏洞标识符为三个原始版本号区间对应漏洞标识符的并集《2,3,4》,其包含了版本号5.2.4和5.3.0对应的漏洞标识符《2,3,4》中的漏洞,因此,满足条件2;进而,可以判断出版本号5.2.0和5.2.4满足“闭区间”的构建条件,因此,可以构建新版本号区间[5.2.0,5.2.4],其对应漏洞标识符为《2,3,4》;进一步的,对指示变量和指针进行更新,如图12所示,为本技术实施例提供的版本号区间合并的示意图五。
[0185]
进一步的,继续执行step2.1,此时,左右指针分别指向版本号5.2.4和5.3.0,由于版本号5.2.4和5.3.0的漏洞标识符相等,因此,可以执行step2.1.2,判断是否满足“右指针移动”条件:右指当前针指向版本号5.3.0,移动后指向版本号5.3.1,由于版本号5.3.0和版本号5.3.1对应的漏洞标识符相等,因此,满足条件1;由于右指针当前指向的5.3.0与移动后指向的5.3.1所构成的闭区间[5.3.0,5.3.1]为原始版本号区间[0,5.3.3)、[0,5.3.5)和[5.3.0,5.3.1]的子区间,因此,满足条件2;原始版本号区间[0,5.3.3)、[0,5.3.5)和[5.3.0,5.3.1]的交集为[5.3.0,5.3.1],该[5.3.0,5.3.1]对应的漏洞标识符为《2,3,4》,满足条件3;但是,由于左指针指向的版本号5.2.4,与右指针移动后指向的版本号5.3.1所构成的区间满足上述“右指针移动”条件的条件1与条件2,但不满足条件3;因此,版本号5.2.4和5.3.0不满足“右指针移动”条件。
[0186]
进而,需要进一步判断版本号5.2.4和5.3.0是否满足“闭区间”的构建条件:由于版本号5.2.4和5.3.0所构成的待合并区间的前导区间为闭区间,因此,不满足“闭区间”的
构建条件中的前置条件。进而,需要进一步判断版本号5.2.4和5.3.0是否满足“左闭右开区间”的构建条件,显然,其同样不满足“左闭右开区间”的构建条件中前置条件。
[0187]
因此,跳转到step2.2;首先,判断左右指针是否相邻,若左右指针相邻,则可以进入step2.2.2判断;由于版本号5.2.4和5.3.0所构成的待合并区间的前置区间[5.2.0,5.3.4]为闭区间,因此,可以进行“左开右闭区间”的构建条件判断:由于版本号5.2.4和5.3.0所构成的待合并区间的前置区间为闭区间,因此,满足“左开右闭区间”的前置条件;(5.2.4,5.3.0]为原始版本号区间[0,5.3.3)、[0,5.3.5)的子区间,因此,满足条件1;原始版本号区间的交集区间为[5.3.3,5.3.5),该[5.3.3,5.3.5)对应的漏洞标识符为《2,3》,其不包含版本号5.3.0对应的漏洞标识符《2,3,4》中的漏洞标识符《4》,因此,版本号5.2.4和5.3.0不满足条件2;也就是说,版本号5.2.4和5.3.0不满足“左开右闭区间”的构建条件。
[0188]
进一步的,需要对版本号5.2.4和5.3.0进行“开区间”的构建条件判断:由于版本号5.2.4和5.3.0所构成的待合并区间的前导区间为闭区间,且当前指针构建左开右闭区间失败,因此,满足“开区间”的构建条件中的前导条件;开区间(5.2.4,5.3.0)为[0,5.3.3)、[0,5.3.5)的子区间,因此,满足“开区间”的构建条件中的条件1;因此,对版本号5.2.4和5.3.0执行开区间构建,该开区间对应的漏洞标识符为《2,3》;进一步的,对指示变量和指针进行更新,如图13所示,为本技术实施例提供的版本号区间合并的示意图六。
[0189]
进一步的,继续执行step2.1,判断版本号5.3.0和5.3.1对应的漏洞标识符是否相同,若相同,则执行step2.1.2,判断是否满足“右指针移动”条件:右指针当前指向版本号5.3.1,移动后指向版本号5.3.3,它们的漏洞标识符分别为《2,3,4》与《1,2》,其不满足“右指针移动”条件中的条件1;因此,不移动右指针。
[0190]
进一步的,首先判断版本号5.3.0和5.3.1是否满足“闭区间”构建条件:由于版本号5.3.0和5.3.1所构建的待合并区间的前导区间为开区间,因此,满足“闭区间”构建条件中的前置条件;左、右指针指向的版本号分别为5.3.0和5.3.1,且它们的漏洞标识符相等,因此,满足“闭区间”构建条件中的条件1;构建的闭区间[5.3.0,5.3.1]是原始版本号区间[0,5.3.3)、[0,5.3.5)和[5.3.0,5.3.1]的子区间,因此,满足“闭区间”构建条件中的条件2;原始版本号区间[0,5.3.3)、[0,5.3.5)和[5.3.0,5.3.1]的交集区间为[5.3.0,5.3.1],该[5.3.0,5.3.1]对应的漏洞标识符为《2,3,4》,其包含了闭区间[5.3.0,5.3.1]对应的漏洞标识符《2,3,4》,因此,满足“闭区间”构建条件中的条件3;也就是说,因此,版本号5.3.0和5.3.1满足“闭区间”构建条件,因此,可以进行闭区间[5.3.0,5.3.1]构建,并对指示变量和指针进行更新,如图11所示。
[0191]
进一步的,继续执行step2.1,判断版本号5.3.1和5.3.3对应的漏洞标识符是否相同,由于它们对应的漏洞标识符分别为《2,3,4》与《1,2》,即,漏洞标识符不相同。因此,可以执行step2.1.1,进一步判断版本号5.3.1和5.3.3是否满足“左闭右开区间”的构建条件:由于版本号5.3.1和5.3.3所构成的待合并区间的前置为闭区间,其并不满足“左闭右开区间”的构建条件中的前置条件。
[0192]
因此,跳转到step2.2,执行指针相邻判断,判断左、右指针是否相邻,由于当前左、右指针相邻,则可以执行step2.2.2,进一步进行前置区间的类型判断:由于版本号5.3.1和5.3.3所构成的待合并区间的前置区间为闭区间,其不属于初始起点或左闭右开区间;因此,进一步,需要判断版本号5.3.1和5.3.3是否满足“左开右闭区间”的构建条件:由于版本
号5.3.1和5.3.3所构成的待合并区间的前置区间为闭区间,因此,满足“左开右闭区间”的构建条件中的前置条件;(5.3.1,5.3.3]是原始版本号区间[0,5.3.5)的子区间,因此,满足“左开右闭区间”的构建条件中的条件1;由于原始版本号区间[0,5.3.5)对应的漏洞标识符为《2》,其无法包含版本号5.3.3对应的漏洞标识符《1,2》,因此,不满足“左开右闭区间”的构建条件中的条件2,也就是说,版本号5.3.1和5.3.3不满足“左开右闭区间”的构建条件。
[0193]
因此,进一步需要判断版本号5.3.1和5.3.3是否满足“开区间”的构建条件:由于版本号5.3.1和5.3.3所构成的待合并区间的前置区间为闭区间,且左开右闭区间构建失败,因此,满足“开区间”的构建条件中的前置条件;(5.3.1,5.3.3)是原始版本号区间[0,5.3.3)、[0,5.3.5)的子区间,满足“开区间”的构建条件中的条件1;进而,进行额外构建操作,确定开区间(5.3.1,5.3.3)对应的漏洞标识符为原始版本号区间[0,5.3.3)和[0,5.3.5)的交集区间[0,5.3.3)所对应的漏洞标识符《2,3》;因此,可以构建开区间(5.3.1,5.3.3),其对应的漏洞标识符为《2,3》,同时更新指示变量与左右指针,如图10所示。
[0194]
进一步的,继续执行step2.1,判断版本号5.3.3与5.3.5对应的漏洞标识符是否相同,由于它们对应的漏洞标识符分别为《1,2》和《null》,即,漏洞标识符不相同。因此,可以执行step2.1.1,进一步判断版本号5.3.3与5.3.5是否满足“左闭右开区间”的构建条件:由于版本号5.3.3与5.3.5所构建的待合并区间的前置区间为开区间,因此,满足“左闭右开区间”的构建条件中的前置条件;区间[5.3.3,5.3.5)是原始版本号区间[0,5.3.5)的子区间,因此,满足“左闭右开区间”的构建条件中的条件1;原始版本号区间[0,5.3.5)对应的漏洞标识符为《2》,不包含版本5.3.3的漏洞标识符《1,2》,不满足“左闭右开区间”的构建条件中的条件2;也就是说,不满足“左闭右开区间”的构建条件。
[0195]
进一步的,跳转到step2.2,进行指针相邻判断,判断左、右指针是否相邻,由于当前左、右指针相邻,则可以执行step2.2.2,进一步进行前置区间的类型判断:由于版本号5.3.3与5.3.5所构建的待合并区间的前置区间为开区间,因此,再次判断版本号5.3.3与5.3.5是否满足“左闭右开区间”的构建条件,显然,版本号5.3.3与5.3.5并不满足“左闭右开区间”的构建条件。因此,可以进一步进行“单独版本号节点”构建,即,对左指针指向的版本号5.3.3进行单独版本号节点构建,且,该单独版本号节点对应的漏洞标识符为《1,2》,更新指示变量,不进行指针更新,如图14所示,为本技术实施例提供的版本号区间合并的示意图七。
[0196]
进一步的,继续执行step2.1,由于左、右指针未移动,而只是前置区间指示变量发生变化,因此,继续判断版本号5.3.3与5.3.5是否满足“左闭右开区间”的构建条件:由于版本号5.3.3与5.3.5所构建的待合并区间的前置区间为单独版本号节点,因此,不满足“左闭右开区间”的构建条件中的前置条件。
[0197]
进而,跳转到step2.2,进行指针相邻判断,判断左、右指针是否相邻,由于当前左、右指针相邻,则可以执行step2.2.2,进一步进行前置区间的类型判断:由于版本号5.3.3与5.3.5所构建的待合并区间的前置区间为单独版本号节点,因此,需要进一步进行“左开右闭区间”的构建条件判断:由于版本号5.3.3与5.3.5所构建的待合并区间的前置区间为单独版本号节点,因此,满足“左开右闭区间”的构建条件中的前置条件;(5.3.3,5.3.5]不属于任一原始版本号区间的子区间,因此,不满足“左开右闭区间”的构建条件中的条件1。也就是说,版本号5.3.3与5.3.5不满足“左开右闭区间”的构建条件。
[0198]
进一步的,需要对版本号5.3.3与5.3.5进行“开区间”构建条件判断:由于版本号5.3.3与5.3.5所构建的待合并区间的前置区间为单独版本号节点,且“左开右闭区间”构建失败,因此,满足“开区间”构建条件中的前置条件;(5.3.3,5.3.5)为原始版本号区间[0,5.3.5)的子区间,因此,满足“开区间”构建条件中的条件1。此外,由于原始版本号区间[0,5.3.5)对应的漏洞标识符为《2》,则(5.3.3,5.3.5)对应的漏洞标识符为《2》;也就是说,版本号5.3.3与5.3.5满足“开区间”构建条件,因此,可以进行开区间(5.3.3,5.3.5)构建,更新指示变量与左右指针,如图15所示,为本技术实施例提供的版本号区间合并的示意图八。
[0199]
进一步的,继续执行step2.1,判断版本号5.3.5与5.4对应的漏洞标识符是否相同,由于它们对应的漏洞标识符分别为《null》和《1》,即,漏洞标识符不相同。因此,可以执行step2.1.1,进一步判断版本号5.3.5与5.4是否满足“左闭右开区间”的构建条件:由于版本号5.3.5与5.4所构建的待合并区间的前置区间为开区间,因此,满足“左闭右开区间”的构建条件中的前置条件;区间[5.3.5,5.4)是不属于任一原始版本号区间的子区间,因此,不满足“左闭右开区间”的构建条件中的条件1。也就是说,不满足“左闭右开区间”的构建条件。
[0200]
进一步的,跳转到step2.2,进行指针相邻判断,判断左、右指针是否相邻,由于当前左、右指针相邻,则可以执行step2.2.2,进一步进行前置区间的类型判断:由于版本号5.3.5与5.4所构建的待合并区间的前置区间为开区间,因此,需要再次判断版本号5.3.5与5.4是否满足“左闭右开区间”的构建条件,显然,版本号5.3.5与5.4并不满足“左闭右开区间”的构建条件。因此,可以进一步进行“单独版本号节点”构建,由于版本号5.3.5与5.4所构建的待合并区间的前置区间为开区间,因此,满足“单独版本号节点”构建条件中的前置条件;但是,由于左指针对应的5.3.5版本对应的漏洞标识符为空,因此,不满足“单独版本号节点”构建条件。进而,可以直接跳过版本号节点5.3.5的构建,进行指示变量更新,且不更新左右指针。
[0201]
进一步的,对版本号5.3.5与5.4进行对“左开右闭区间”判断:由于版本号5.3.5与5.4所构建的待合并区间的前置区间为单独版本节点,因此,满足“左开右闭区间”的构建条件中的前置条件;(5.3.5,5.4]不属于任一原始版本号区间的子区间,因此,不满足“左开右闭区间”的构建条件中的条件1。也就是说,版本号5.3.5与5.4不满足“左开右闭区间”的构建条件。
[0202]
进一步的,对版本号5.3.5与5.4进行“开区间”构建条件判断:由于版本号5.3.5与5.4所构建的待合并区间的前置区间为单独版本节点,因此,满足“开区间”构建条件中的前置条件;(5.3.5,5.4]不属于任一原始版本号区间的子区间,因此,不满足“开区间”构建条件中的条件1;也就是说,版本号5.3.5与5.4不满足“开区间”的构建条件,因此,该区间轮空,直接更新指示变量与左右指针,如图16所示,为本技术实施例提供的版本号区间合并的示意图九,这里为方便说明保留了5.3.5版本对应的空的漏洞标识符,在实际算法实施过程中也可以依据需要决定是否保留漏洞标识符为空的单独版本号节点。
[0203]
此时,左、右指针都指向末尾,版本号端点有序列表遍历完成,因此,进入step3进行结果修正;step3:对于末尾端点进行修正:
[0204]
step3.1:若前导区间为非右闭区间(即为左闭右开、开区间或者区间轮空),对末尾端点建立单独版本节点或者节点轮空;
[0205]
step3.2:否则,结束处理,转到step4;
[0206]
step4:输出最新合成的版本号区间以及该区间对应的原始漏洞数据上的漏洞标识符;
[0207]
对结果进行修正,因为此时的前导区间为轮空状态,为非右闭区间,则进入step3.1处理流程,为列表末尾的5.4版本构建单独版本节点,并结束流程,输出最终结果,如图17所示,为本技术实施例提供的版本号区间合并的示意图十。如示例数据所示,在完成原始软件资产版本漏洞数据的版本号区间重新合并划分后,唯一的一条版本最多只对应一条数据信息,相比于原始数据可能对应多条数据的情况,重新划分后的数据更有利于隐私查询场景下漏洞数据查询的效率提升。
[0208]
综上所述,在本技术实施例中,将“以漏洞为主”的漏洞信息查询方式转换为“以版本号为主”的漏洞信息查询方式,进而,在进行漏洞信息查询时,便可以直接根据用户输入的目标系统的目标版本号,来从目标版本漏洞映射表中,获取目标版本号的所有漏洞标识符,其中,该目标版本漏洞映射表是对目标系统的各个版本号对应的漏洞标识符进行汇总获得的,避免了现有技术中需要全部遍历才能确定出某一版本号的所有漏洞信息,极大降低了通信开销,提高了漏洞信息的查询效率。
[0209]
如图18所示,基于同一发明构思,本技术实施例提供一种漏洞查询装置,该装置180包括:
[0210]
漏洞标识符获取单元1801,用于根据用户输入的目标系统的目标版本号,从目标版本漏洞映射表中,获取目标版本号的所有漏洞标识符;其中,目标系统具有至少一个版本号,目标版本漏洞映射表是对目标系统的各个版本号对应的漏洞标识符进行汇总获得的,且目标版本漏洞映射表中包含多条数据,目标版本号的所有漏洞标识符为目标版本漏洞映射表中的一条数据,一个漏洞标识符对应一种漏洞信息。
[0211]
在一种可能的实施方式中,装置还包括目标版本漏洞映射表获取单元1802,其中,目标版本漏洞映射表获取单元1802,用于:
[0212]
对目标系统的原始数据进行预处理,获得第一版本漏洞映射表;其中,第一版本漏洞映射表中包含多个原始版本号区间和多个漏洞标识符,一个漏洞标识符与至少一个原始版本号区间相映射;原始版本号区间包含单个版本号或多个连续的版本号;
[0213]
对第一版本漏洞映射表中各个版本号对应的漏洞标识符进行汇总,并对各个版本号进行版本号区间构建,获得目标版本漏洞映射表。
[0214]
在一种可能的实施方式中,目标版本漏洞映射表获取单元1802,具体用于:
[0215]
对第一版本漏洞映射表中的各个原始版本号区间的左、右端点版本号进行升序排序,获得目标系统的版本号排序表;
[0216]
根据版本号排序表中的各个版本号的排序,以及各个版本号各自对应的漏洞标识符,获得第二版本漏洞映射表;其中,第二版本漏洞映射表包括多个版本号和多个漏洞标识符,一个版本号与至少一个漏洞标识符相映射或不与标识符相映射;
[0217]
依次对第二版本漏洞映射表中的任两个相邻版本号进行版本号区间构建,获得目标版本漏洞映射表。
[0218]
在一种可能的实施方式中,目标版本漏洞映射表获取单元1802,具体用于:
[0219]
针对任两个相邻版本号,执行如下过程:
[0220]
确定是否遍历完版本号排序表中的所有版本号;
[0221]
若确定未遍历完所有版本号,则确定任两个相邻版本号各自对应的漏洞标识符是否相同;
[0222]
若确定任两个相邻版本号各自对应的漏洞标识符相同,则确定由任两个相邻版本号构建获得的第一待合并区间的第一右端点版本号与第一右端点版本号相邻的下一版本号各自对应的漏洞标识符是否相同,以及,确定由第一右端点版本号与第一右端点版本号相邻的下一版本号所构成的区间是否为任一原始版本号区间的子区间;
[0223]
若确定漏洞标识符不相同,则根据前导区间的类型,判断第一待合并区间的类型。
[0224]
在一种可能的实施方式中,目标版本漏洞映射表获取单元1802,具体用于:
[0225]
若第一右端点版本号与第一右端点版本号相邻的下一版本号各自对应的漏洞标识符相同,且由第一右端点版本号与第一右端点版本号相邻的下一版本号所构成的区间为任一原始版本号区间子区间,则将第一待合并区间的第一右端点版本号更新为第一右端点版本号相邻的下一版本号,得到第二待合并区间,并再次确定是否遍历完版本号排序表中的所有版本号;
[0226]
否则,则根据前导区间的类型,判断第一待合并区间的类型。
[0227]
在一种可能的实施方式中,目标版本漏洞映射表获取单元1802,具体用于:
[0228]
若确定未遍历完所有版本号,则确定第二待合并区间的第二左、右端点版本号各自对应的漏洞标识符是否相同;
[0229]
若确定第二左、右端点版本号各自对应的漏洞标识符相同,则确定第二右端点版本号与第二右端点版本号相邻的下一版本号各自对应的漏洞标识符是否相同,以及,确定由第二右端点版本号与第二右端点版本号相邻的下一版本号所构成的区间是否为任一原始版本号区间的子区间;
[0230]
否则,则根据前导区间的类型,判断第二待合并区间的类型。
[0231]
在一种可能的实施方式中,目标版本漏洞映射表获取单元1802,具体用于:
[0232]
若前导区间的类型为闭区间,则依次判断第一待合并区间是否符合左开右闭区间或开区间的构建条件中的任一条件;
[0233]
若前导区间的类型为左闭右开区间,则依次判断第一待合并区间是否符合左闭右开闭区间、闭区间或单独版本号节点的构建条件中的任一条件;
[0234]
若前导区间的类型为左开右闭区间,则依次判断第一待合并区间是否符合左开右闭区间或开区间的构建条件中的任一条件;
[0235]
若前导区间的类型为开区间,则依次判断第一待合并区间是否符合闭区间、左闭右开区间或单独版本号节点的构建条件中的任一条件;
[0236]
在一种可能的实施方式中,左开右闭区间的构建条件包括判断前导区间的类型是否为单独版本号节点、闭区间或左开右闭区间中的一种、第一待合并区间是否为任一原始版本号区间的子区间以及包含第一待合并区间的所有原始版本号区间的交集区间对应的漏洞标识符是否包含第一右端点版本号的所有漏洞标识符。
[0237]
在一种可能的实施方式中,开区间的构建条件包括判断前导区间的类型是否为单独版本号节点、闭区间或左开右闭区间中的一种、第一待合并区间是否为任一原始版本号区间的子区间以及第一待合并区间上对应的漏洞标识符是否为包含任第一待合并区间的
所有原始版本号区间的交集区间所对应的漏洞标识符。
[0238]
在一种可能的实施方式中,左闭右开区间的构建条件包括判断前导区间的类型是否为初始起点、单独版本号节点、开区间或左闭右开区间中的一种、第一待合并区间是否为任一原始版本号区间的子区间以及包含第一待合并区间的所有原始版本号区间的交集区间对应的漏洞标识符是否包含第一左端点版本号的所有漏洞标识符。
[0239]
在一种可能的实施方式中,闭区间的构建条件包括判断前导区间的类型是否为初始起点、开区间或左闭右开区间中的一种、任两个相邻版本号各自对应的漏洞标识符是否相同、第一待合并区间是否为任一原始版本号区间的子区间以及包含第一待合并区间的所有原始版本号区间的交集区间对应的漏洞标识符是否包含第一左、右端点版本号的所有漏洞标识符。
[0240]
在一种可能的实施方式中,单独版本号节点的构建条件包括判断前导区间的类型是否为初始起点、单独版本号节点、开区间或左闭右开区间中的一种、第一待合并区间是否符合闭区间和左闭右开区间的构建条件中的所有条件以及单独版本号节点是否存在对应的漏洞标识符。
[0241]
该装置可以用于执行图2~图17所示的实施例中所述的方法,因此,对于该装置的各功能单元所能够实现的功能等可参考图2~图17所示的实施例的描述,不多赘述。其中,虚线所表示的功能单元为非必要功能单元。
[0242]
请参见图19,基于同一技术构思,本技术实施例还提供了一种计算机设备190,可以包括存储器1901和处理器1902。
[0243]
所述存储器1901,用于存储处理器1902执行的计算机程序。存储器1901可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序等;存储数据区可存储根据计算机设备的使用所创建的数据等。处理器1902,可以是一个中央处理单元(central processing unit,cpu),或者为数字处理单元等。本技术实施例中不限定上述存储器1901和处理器1902之间的具体连接介质。本技术实施例在图19中以存储器1901和处理器1902之间通过总线1903连接,总线1903在图19中以粗线表示,其它部件之间的连接方式,仅是进行示意性说明,并不引以为限。所述总线1903可以分为地址总线、数据总线、控制总线等。为便于表示,图19中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。
[0244]
存储器1901可以是易失性存储器(volatile memory),例如随机存取存储器(random-access memory,ram);存储器1901也可以是非易失性存储器(non-volatile memory),例如只读存储器,快闪存储器(flash memory),硬盘(hard disk drive,hdd)或固态硬盘(solid-state drive,ssd)、或者存储器1901是能够用于携带或存储具有指令或数据结构形式的期望的程序代码并能够由计算机存取的任何其他介质,但不限于此。存储器1901可以是上述存储器的组合。
[0245]
处理器1902,用于调用所述存储器1901中存储的计算机程序时执行如图2~图17所示的实施例中设备所执行的方法。
[0246]
基于同一发明构思,本技术实施例提供一种计算机可读存储介质,计算机可读存储介质存储有计算机程序,计算机程序包括程序指令,程序指令当被计算机执行时,使计算机执行如前文论述的漏洞查询方法。由于上述计算机可读存储介质解决问题的原理与方法
相似,因此上述计算机可读存储介质的实施可以参见方法的实施,重复之处不再赘述。
[0247]
本领域普通技术人员可以理解:实现上述方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成,前述的程序可以存储于一计算机可读取存储介质中,该程序在执行时,执行包括上述方法实施例的步骤;而前述的存储介质包括:移动存储设备、只读存储器(rom,read-only memory)、随机存取存储器(ram,random access memory)、磁碟或者光盘等各种可以存储程序代码的介质。或者,本发明上述集成的单元如果以软件功能模块的形式实现并作为独立的产品销售或使用时,也可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明实施例的技术方案本质上或者说对现有技术做出贡献的部分可以用软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机、服务器、或者网络设备等)执行本发明各个实施例所述方法的全部或部分。而前述的存储介质包括:移动存储设备、rom、ram、磁碟或者光盘等各种可以存储程序代码的介质。
[0248]
尽管已描述了本技术的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例做出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本技术范围的所有变更和修改。
[0249]
显然,本领域的技术人员可以对本技术进行各种改动和变型而不脱离本技术的精神和范围。这样,倘若本技术的这些修改和变型属于本技术权利要求及其等同技术的范围之内,则本技术也意图包含这些改动和变型在内。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1