一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

组件依赖信息的检测方法及装置与流程

2021-10-24 07:32:00 来源:中国专利 TAG:信息 组件 检测方法 装置 依赖


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.从ruby项目中获取gemspec文件,并将所述gemspec文件作为所述预设文件;
27.所述应用正则表达式对预设文件进行解析,获取原始依赖信息,具体包括:
28.使用正则表达式解析所述gemspec文件,获取gemspec文件内的依赖关系;其中,所述gemspec文件内的依赖关系包括:ruby项目中的组件标识及所述组件间的依赖信息;所述ruby项目中的组件标识为所述原始依赖信息与所述真实依赖信息的共有组件的标识。
29.上述中,预设文件的数据结构的索引为所述预设文件所在目录,根据所述预设文件的数据结构的索引,应用包管理的依赖关系正则表达式进行解析,生成所述真实依赖信息,包括:在所述预设文件所在目录下,应用包管理的依赖关系正则表达式进行解析,获取所述真实依赖信息。
30.进一步地,所述方法还包括:应用修正后的所述原始依赖信息,进行第三方组件的漏洞检测。
31.本技术第二方面提供一种组件依赖信息的检测装置,包括:
32.第一解析模块,用于应用正则表达式对预设文件进行解析,获取原始依赖信息;所述原始依赖信息包括,在所述预设文件记录中,组件间依赖关系;
33.第二解析模块,用于通过所述预设文件的数据结构的索引,获取真实依赖信息;所述真实依赖信息包括,在所述预设文件所在数据结构的索引指向中,组件间依赖关系;
34.比对模块,用于按照所述原始依赖信息与所述真实依赖信息的共有组件的标识,应用所述真实依赖信息比对所述原始依赖信息;
35.修正模块,用于应用所述真实依赖信息修正所述原始依赖信息。
36.本发明的有益效果在于,通过数据结构的索引,从数据结构的层面,获取真实依赖信息,从而可以使用真实依赖信息来修正预设文件内的依赖信息,改变了信息的整体状态。如果使用本技术的技术方案进行漏洞检测,组件检测的全面性较高,相对比较全;同时,组
件检测准确度高,不容易误检。
附图说明
37.下面结合附图详述本发明的具体结构
38.图1为本发明的第一实施例的组件依赖信息的检测方法的整体流程图;
39.图2为本发明的第二实施例的获取原始依赖信息的流程图;
40.图3为本发明的第三实施例的比对原始依赖信息的流程图;
41.图4为本发明的第四实施例的修正原始依赖信息的流程图;
42.图5为本发明的第五实施例的组件依赖信息的检测装置的程序模块示意图。
具体实施方式
43.为详细说明本发明的技术内容、构造特征、所实现目的及效果,以下结合实施方式并配合附图详予说明。
44.请参阅图1,图1为本发明的第一实施例的组件依赖信息的检测方法的整体流程图。本发明第一方面介绍一种组件依赖信息的检测方法,按照该方法运行的某一顺序,进行论述;该执行顺序可以是多线程并行,也可以是按照其他的运行顺序进行分析。该方法包括:
45.步骤s101、应用正则表达式对预设文件进行解析,获取原始依赖信息;所述原始依赖信息包括:在所述预设文件记录中,组件间依赖关系;
46.步骤s102、通过所述预设文件的数据结构的索引,获取真实依赖信息;所述真实依赖信息包括:在所述预设文件所在数据结构的索引指向中,组件间依赖关系;
47.步骤s103、按照所述原始依赖信息与所述真实依赖信息的共有组件的标识,应用所述真实依赖信息检测所述原始依赖信息;
48.步骤s104、根据比对结果,应用所述真实依赖信息修正所述原始依赖信息中的组件间依赖关系。
49.本实施例中,由于在二次开发等项目的影响下,预设文件内记录的数据结构容易产生混乱,组件的信息容易出问题;相对应的,文件的索引必然会产生一定的显性变化,以保证组件所在项目的正常运行。基于此,一方面,按照常规漏洞检测的方式,通过正则表达式解析文件,获得原始依赖信息;另一方面,通过数据结构的索引,从数据结构的层面,获取真实依赖信息,从而可以使用真实依赖信息来修正。基于此,如果使用本技术的技术方案进行检测,全面性较高;同时,组件检测准确度高,也不容易误检。
50.上述项目,具体可以通过编译构建得到的程序,由各个组件构成。对预设文件进行解析的过程可以为,依次调用程序中的各个组件进行编译生成对应的编译文件,对编译文件进行检查操作,在各个编译文件检查均无误的情况下,进行打包处理,得到软件对应的安装包。对编译文件进行检查,例如检查运行编译文件后的输出格式是否有误、是否输出预设的错误数据等。
51.原始依赖信息与真实依赖信息分别具有各自的范围,包括在依赖关系下的组件名称、组件版本等信息。其表现形式可以是多样的,可以是哈希值或者其他字符串,构成了整个系统的依赖体系。
52.上述中索引是存储引擎用于快速找到记录,其可以提高项目的性能,尤其是当表中的数据量越来越大时,索引对于性能的影响愈发重要,其主要面向开发者和应用者。
53.请参阅图2,图2为本发明的第二实施例的获取原始依赖信息的流程图。步骤s101、所述应用正则表达式对预设文件进行解析,获取原始依赖信息,包括:
54.步骤s201、通过正则表达式解析所述预设文件的内容,提取待检测依赖关系。
55.步骤s202、遵循所述待检测依赖关系,提取预设文件内的标识参数与待修正参数;所述预设文件内的组件名称属于所述原始依赖信息,且为所述原始依赖信息与所述真实依赖信息的共有组件的标识;所述待修正参数为所述原始依赖信息中的所述组件间依赖关系。
56.与仅仅选取标识参数的常规漏洞检测的手段不同,为分析与修正原始的依赖关系,本方案特意划分了标识参数与修正参数。标识参数可以是组件名称,也可以是序号,也可以是其他的关键字节,只要不具有特定的引用关系,即可作为标识参数。而待修正参数,一般是指可能会改变的参数,例如,组件版本信息等数据。
57.可选地,在对ruby项目进行漏洞检测时,可直接使用内置的预设规则获取原始依赖信息。例如,可以根据数据依赖关系获取的正则表达式(.add\w*_dependency),直接分析gemspec文件。
58.其中,正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑。
59.可选地,所述步骤s101、所述应用正则表达式对预设文件进行解析,获取原始依赖信息,还包括:去除所述原始依赖信息中的无效字符。
60.由于在常规的开发中,上述的预设文件主要作为开发者的注释文件来使用,而在项目的开发过程中可能会使用某些开源的组件,而开源的组件又常常由多个开发者独自完成,在每个开发者本身具有不同的思路与习惯,可能会出现本方法中的某些无效字符;其中,无效字符可以通过正则表达式中的[%<>\[\]~(){}>=
″′
,]去除。
[0061]
其中,在不同项目和编码规范中的无效字符各有不同,主要是指当前软件无法处理或者无法识别的字符,字符在一个规范下是有效的,在另外一个规范中就可能变为无效。例如,在java的项目中定义变量类型的数据,在ruby项目中属于无效字符。
[0062]
本实施例中,去除无效字符,可以保证方法的检测效果更精准且适用性更广。需要注意的是,虽然只要使用普通的正则表达式,就可去除无效字符,但是由于现有技术中并没有对版本信进行修正的相关思路,因而需要特意强调。
[0063]
需要了解的是,ruby是完全面向对象的语言,其变量没有类型,因此,相对于c、c
#
等语言而言,具有更短的开发周期。也正是由于这一原因,在ruby的项目开发中引入大量开源的组件之后,更应当着重考察项目的安全性。因此,在一具体的实施例中,
[0064]
步骤s101、应用正则表达式对预设文件进行解析,获取原始依赖信息之前,包括:从ruby项目中获取gemspec文件,并将所述gemspec文件作为所述预设文件;
[0065]
步骤s101、所述应用正则表达式对预设文件进行解析,获取原始依赖信息包括:
[0066]
使用正则表达式解析所述gemspec文件,获取gemspec文件内的依赖关系;其中,所述gemspec文件内的依赖关系包括:ruby项目中的组件标识及所述组件间的依赖信息;所述
ruby项目中的组件标识为所述原始依赖信息与所述真实依赖信息的共有组件的标识。
[0067]
在实施例中,直接从ruby项目中获取的文件后缀名为gemspec。所述gemspec文件,是指构建ruby项目的gem包管理器用于储存项目基本信息以及依赖组件信息的文件。然而,在二次开发之后,gemspec文件内的数据可能并不会进行更改,因此,需要对其进行检测与分析。
[0068]
上述中,gemspec文件,又称包属性的开发人员文件,保存诸如作者、注释、示例用法、使用许可证、依赖关系等基本信息;多以简单的纯文本格式保存。
[0069]
上述中,预设文件的数据结构的索引,包括目录结构、超链接等多种形式。本实施例中,使用目录结构作为数据结构的索引。
[0070]
步骤s102、所述通过所述预设文件的数据结构的索引,获取真实依赖信息,包括:根据所述预设文件的数据结构的索引,应用包管理的依赖关系正则表达式进行解析,生成所述真实依赖信息。
[0071]
本实施例中,管理gem包,其含有包的基本信息。在运行某一项目时,需要组件的地址或名称进行数据的调用或复用,而经过研究与实践之后,使用gem包中的包信息,可以更精确地获得真实依赖关系。
[0072]
其中,预设文件的数据结构的索引为所述预设文件所在目录,在所述预设文件所在目录下,应用包管理的依赖关系正则表达式进行解析,获取所述真实依赖信息。其中,由于所述gem包含有较多种类的数据,在对ruby项目进行检测与分析时,可以在gemspec的文件所在目录下执行gem的特有命令(gem dependency),再解析数据,就直接分析gem包中的真实依赖信息。需要注意的是,gem的特有命令主要是用来开发的,而不是用作数据修正的。
[0073]
进一步地,根据所述gem包中的依赖关系,获取组件标识及对应的依赖信息。本实施例中,为保证漏洞检测的效果更佳,使用共有组件的标识来构建依赖关系。由此,可以更好地展示出整体的依赖关系,方便开发者查看。所述共有组件的标识包括:组件名称,所述组件间依赖关系包括:组件版本。
[0074]
进一步地,请参阅图3,图3为本发明的第三实施例的比对原始依赖信息的流程图。
[0075]
步骤s103、所述应用所述真实依赖信息比对所述原始依赖信息中的组件间依赖关系,包括:
[0076]
步骤s301、遍历所述预设文件所在项目的组件,汇总所述预设文件内的组件名称与组件版本;
[0077]
其中,遍历所述预设文件所在项目的组件是指沿着组件的原始依赖关系,依次对每个组件进行检测,主要是检查标识参数的值。汇总标识参数的步骤,本身可以具有周期性,也可以按照客户的需求设定周期,以定时更新。本实施例中,以预设文件内的组件名称作为标识参数。
[0078]
步骤s302、将所述预设文件内的组件名称与所述真实依赖信息中的组件名称进行匹配后,比对所述组件版本。
[0079]
本实施例中,为了更全面而准确地进行漏洞检测,先遍历组件,汇总标识参数,再使用标识参数,进行数据匹配,分析并判断原始依赖信息之后,再考虑使用真实依赖信息进行修正。
[0080]
具体的,请参阅图4,图4为本发明的第四实施例的修正原始依赖信息的流程图。在
步骤s104、所述应用所述真实依赖信息修正所述原始依赖信息中的组件间依赖关系,包括:
[0081]
步骤s401、获取所述真实依赖信息中比对一致的组件名称;
[0082]
步骤s402、应用所述真实依赖信息中比对一致的组件名称,获取真实依赖信息中的组件的版本信息;
[0083]
步骤s403、使用所述真实依赖信息中的组件的版本信息,替换所述原始依赖信息中的组件版本信息。
[0084]
本实施例中,为降低操作难度,也为避免新参数引用所导致的问题,在使用组件名称作为标识参数进行数据匹配之后,直接应用真实依赖信息修正组件的版本信息,替换待修正参数中的版本信息。需要注意的是,在ruby项目的开发中,由于其开发周期短,版本更新相对较快,其版本信息容易被忽略,且人工修改的难度较大,因此,本实施例的技术方案尤其适用于ruby项目的依赖信息检测。
[0085]
进一步地,所述方法还包括:应用修正后的所述原始依赖信息,进行第三方组件的漏洞检测。
[0086]
需要了解的是,大多数漏洞检测的技术中,都直接使用正则表达式的方式,直接从预设文件中获取依赖信息,为了适配于现有的常规技术。本实施例中,重点强调本技术尤其适用于第三方组件的漏洞检测,且可以获得较优地检测效果。
[0087]
请参阅图5,图5为本发明的第五实施例的组件依赖信息的检测装置的程序模块示意图。本技术第二方面提供一种组件依赖信息的检测装置,包括:
[0088]
第一解析模块100,用于应用正则表达式对预设文件进行解析,获取原始依赖信息;所述原始依赖信息包括,在所述预设文件记录中,组件间依赖关系;
[0089]
第二解析模块200,用于通过所述预设文件的数据结构的索引,获取真实依赖信息;所述真实依赖信息包括,在所述预设文件所在数据结构的索引指向中,组件间依赖关系;
[0090]
比对模块300,用于按照所述原始依赖信息与所述真实依赖信息的共有组件的标识,应用所述真实依赖信息比对所述原始依赖信息;
[0091]
修正模块400,用于应用所述真实依赖信息修正所述原始依赖信息。
[0092]
具体的,所述第二解析模块200,还用于根据所述预设文件的数据结构的索引,应用包管理的依赖关系正则表达式进行解析,生成所述真实依赖信息。
[0093]
所述对比模块300,具体用于通过正则表达式解析所述预设文件的内容,提取待检测依赖关系;
[0094]
还具体用于遵循所述待检测依赖关系,提取预设文件内的组件名称与待修正参数;所述预设文件内的组件名称属于所述原始依赖信息,且为所述原始依赖信息与所述真实依赖信息的共有组件的标识;所述待修正参数为所述原始依赖信息中的所述组件间依赖关系。
[0095]
第一解析模块100,具体用于遍历所述预设文件所在项目的组件,汇总所述预设文件内的组件名称与组件版本;
[0096]
还具体用于将所述预设文件内的组件名称与所述真实依赖信息中的组件名称进行匹配后,比对所述组件版本。
[0097]
修正模块400,具体用于:
[0098]
获取所述真实依赖信息中比对一致的组件名称;
[0099]
应用所述真实依赖信息中比对一致的组件名称,获取真实依赖信息中的组件的版本信息。
[0100]
使用所述真实依赖信息中的组件的版本信息,替换所述原始依赖信息中的组件版本信息。
[0101]
进一步地,第一解析模块100还用于去除所述原始依赖信息中的无效字符。
[0102]
所述第一解析模块100,具体用于从ruby项目中获取gemspec文件;
[0103]
解析所述gemspec文件,获取ruby项目中的组件标识及对应的依赖信息。
[0104]
进一步地,所述装置还包括:漏洞检测模块500,应用修正后的所述原始依赖信息,进行第三方组件的漏洞检测。
[0105]
本实施例中,通过装置承载方法,装置可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,模块的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个模块或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或模块的间接耦合或通信连接,可以是电性,机械或其它的形式。
[0106]
在本技术各个实施例中的各功能模块可以集成在一个处理模块中,也可以是各个模块单独物理存在,也可以两个或两个以上模块集成在一个模块中。上述集成的模块既可以采用硬件的形式实现,也可以采用软件功能模块的形式实现。
[0107]
集成的模块如果以软件功能模块的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本技术的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本技术各个实施例方法的全部或部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(rom,read

only memory)、随机存取存储器(ram,random access memory)、磁碟或者光盘等各种可以存储程序代码的介质。
[0108]
为了实现上述实施例,本技术实施例还提出一种电子设备。电子设备旨在表示各种形式的数字计算机,诸如,膝上型计算机、台式计算机、工作台、个人数字助理、服务器、刀片式服务器、大型计算机、和其它适合的计算机。电子设备还可以表示各种形式的移动装置,诸如,个人数字处理、蜂窝电话、智能电话、可穿戴设备和其它类似的计算装置。
[0109]
以上所述仅为本发明的实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技术领域,均同理包括在本发明的专利保护范围内。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献

  • 日榜
  • 周榜
  • 月榜