开源组件函数的匹配方法、装置、计算机设备和存储介质制造方法及图纸

技术编号:33119883 阅读:8 留言:0更新日期:2022-04-17 00:16
本发明专利技术适用于开源识别技术领域,提供了一种开源组件函数的匹配方法,所述开源组件函数的匹配方法包括:获取开源函数和目标函数;所述开源函数为开源组件中的所有函数,所述目标函数为目标组件中的所有函数;剔除所述开源函数中的克隆函数、测试函数和工具函数,得到第一核心函数;对所述目标函数进行筛选,得到第二核心函数;对所述第一核心函数和所述核心函数进行哈希处理,根据所述第一核心函数和所述第二核心函数的哈希特征,判断所述第一核心函数和所述第二核心函数是否匹配;若匹配,得到含有所述开源函数的所述目标软件。该匹配方法大大提升了组件识别的速度和组件识别得精确度,有效压缩数据库,从而使得大规模组件识别工作变得可行。工作变得可行。工作变得可行。

【技术实现步骤摘要】
开源组件函数的匹配方法、装置、计算机设备和存储介质


[0001]本专利技术属于开源识别
,尤其涉及开源组件函数的匹配方法、装置、计算机设备和存储介质。

技术介绍

[0002]第三方开源组件被广泛应用于软件开发的过程中,以提高开发速度,提升代码质量,避免重复开发已有功能。然而,过于依赖于第三方开源组件,在没有合理的管理的情况下,引入开源组件会存在很多问题,比如,第三方开源组件可能会带入自身组件所包含的安全漏洞,对软件构成威胁;第三方开源组件本版更新维护情况依赖于第三方的开发者,从而不能保证能够无缝升级更新;第三方开源组件所依赖的授权许可(License)不尽相同,引入组件可能会有软件合规的问题产生。因此,管理维护软件中所用的第三方开源组件是对于软件开发中安全把控,软件合规,软件维护至关重要的。
[0003]然而,随着软件开发规模的增大,开发者的增多,对于第三方组件的管理变得越来越难。因此,如何快速的扫描大规模代码,从中识别第三方组件,变成开源组件管理,在软件公司的实际运用中的最重要的一环。现有的第三方组件扫描工具,通常会收集第三方组件的源码信息,并将其中的源代码文件做哈希处理,存入数据库中。在组件扫描时,扫描工具会将数据库中的哈希值与目标软件中文件的哈希值进行比较;如果一个开源组件中的每个文件的哈希值可以与目标软件中的哈希值一一匹配,那么扫描工具会认为该目标软件包含该第三方组件。
[0004]而现有开源组件扫描方法会匹配一个开源组件中的所有文件,这样的作法造成数据扫描及匹配开销较大,降低匹配精度和效率。

技术实现思路

[0005]本专利技术实施例的目的在于提供一种开源组件函数的匹配方法,旨在解决第三方开源组件数据匹配开销较大、匹配精度和效率低的技术问题。
[0006]本专利技术实施例是这样实现的,一种开源组件函数的匹配方法,所述开源组件函数的匹配方法包括:获取开源函数和目标函数;所述开源函数为开源组件中的所有函数,所述目标函数为目标组件中的所有函数;剔除所述开源函数中的克隆函数、测试函数和工具函数,得到第一核心函数;对所述目标函数进行筛选,得到第二核心函数;对所述第一核心函数和所述核心函数进行哈希处理,根据所述第一核心函数和所述第二核心函数的哈希特征,判断所述第一核心函数和所述第二核心函数是否匹配;若匹配,得到含有所述开源函数的所述目标软件。
[0007]本专利技术实施例的另一目的在于一种开源组件函数的匹配装置,所述开源组件函数的匹配装置包括:
函数获取模块,用于获取开源函数和目标函数;所述开源函数为开源组件中的所有函数,所述目标函数为目标组件中的所有函数;函数提取模块,剔除所述开源函数中的克隆函数、测试函数和工具函数,得到第一核心函数;对所述目标函数进行筛选,得到第二核心函数;函数匹配模块,对所述第一核心函数和所述核心函数进行哈希处理,根据所述第一核心函数和所述第二核心函数的哈希特征,判断所述第一核心函数和所述第二核心函数是否匹配;若匹配,得到含有所述开源函数的所述目标软件。
[0008]本专利技术实施例的另一目的在于一种计算机设备,包括存储器和处理器,所述存储器中存储有计算机程序,所述计算机程序被所述处理器执行时,使得所述处理器执行所述开源组件函数的匹配方法的步骤。
[0009]本专利技术实施例的另一目的在于一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时,使得所述处理器执行所述开源组件函数的匹配方法的步骤。
[0010]本专利技术实施例提供的一种开源组件函数的匹配方法,通过将开源组件和目标组件中的大部分函数进行了筛除,只保护核心的第一核心函数和第二核心函数,然后进行特征提取以及匹配工作。该匹配方法大大提升了组件识别的速度和组件识别得精确度,有效压缩数据库,从而使得大规模组件识别工作变得可行。
附图说明
[0011]图1为一个实施例提供的开源组件函数的匹配方法的应用环境图;图2为一个实施例提供的开源组件函数的匹配方法的流程图;图3为一个实施例提供的剔除克隆函数的方法的流程图;图4为一个实施例提供的剔除测试函数的方法的流程图;图5为一个实施例提供的剔除工具函数的方法的流程图;图6为一个实施例提供的筛选目标函数的方法的流程图;图7为一个实施例提供的两步匹配策略的流程图;图8为一个实施例提供的开源组件函数的匹配装置的结构框图;图9为一个实施例中计算机设备的内部结构框图。
具体实施方式
[0012]为了使本专利技术的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本专利技术进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本专利技术,并不用于限定本专利技术。
[0013]可以理解,本申请所使用的术语“第一”、“第二”等可在本文中用于描述各种元件,但除非特别说明,这些元件不受这些术语限制。这些术语仅用于将第一个元件与另一个元件区分。举例来说,在不脱离本申请的范围的情况下,可以将第一xx脚本称为第二xx脚本,且类似地,可将第二xx脚本称为第一xx脚本。
[0014]图1为本专利技术实施例提供的开源组件函数的匹配方法的应用环境图,如图1所示,在该应用环境中,包括终端110以及计算机设备120。
[0015]计算机设备120可以是独立的物理服务器或终端,也可以是多个物理服务器构成的服务器集群,可以是提供云服务器、云数据库、云存储和CDN等基础云计算服务的云服务器。
[0016]终端110可以是智能手机、平板电脑、笔记本电脑、台式计算机、智能音箱、智能手表等,但并不局限于此。终端110以及计算机设备120可以通过网络进行连接,本专利技术在此不做限制。
[0017]如图2所示,在一个实施例中,提出了一种开源组件函数的匹配方法,本实施例主要以该方法应用于上述图1中的计算机设备120来举例说明,具体可以包括步骤S202~步骤S208:步骤S202,获取开源函数和目标函数;所述开源函数为开源组件中的所有函数,所述目标函数为目标组件中的所有函数。
[0018]具体的,开源组件是一类可应用于软件应用程序开发的第三方组件,开发人员可基于现有的开源组件来快速开发软件应用程序。开源组件由各式各样的源代码组成,而开源函数指的是开源代码中所包含的函数。目标组件是待检测的组件,其中所包含的各式各样的函数就是所述目标函数。
[0019]现有的第三方组件扫描工具通常会收集第三方组件的源码信息,并将其中的源代码文件做哈希处理,存入数据库中。在组件扫描时,这些工具会比较目标软件中文件的哈希值,与数据库中的哈希值,如果一个开源组件中的每个文件的哈希值可以与目标软件中的哈希值一一匹配,那么,扫描工具会认为该目标软件包含该第三方组件。现有技术会匹配一个开源组件中的所有文件,这样的作法存在以下几个问题:第一,因为要针对所有文件都进行一次匹配,因此随着数据库中收录的开源组件增多,软件扫描的匹配次数也随之增加。扫描一个软件往往需要非常长的时间。
[0020]第二,数据库中也需要记录每个文件的哈希值,数据储存的开本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种开源组件函数的匹配方法,其特征在于,所述开源组件函数的匹配方法包括:获取开源函数和目标函数;所述开源函数为开源组件中的所有函数,所述目标函数为目标组件中的所有函数;剔除所述开源函数中的克隆函数、测试函数和工具函数,得到第一核心函数;对所述目标函数进行筛选,得到第二核心函数;对所述第一核心函数和所述核心函数进行哈希处理,根据所述第一核心函数和所述第二核心函数的哈希特征,判断所述第一核心函数和所述第二核心函数是否匹配;若匹配,得到含有所述开源函数的所述目标软件。2.根据权利要求1所述的开源组件函数的匹配方法,其特征在于,剔除所述克隆函数的方法包括:获取所述开源函数;对所述开源函数进行哈希处理,将哈希值相同的函数追溯到最早创建的源函数;根据所述源函数得到克隆文件,从所述克隆文件中提取所述克隆函数;剔除所述开源函数中的所述克隆函数。3.根据权利要求1所述的开源组件函数的匹配方法,其特征在于,剔除所述测试函数的方法包括:获取开源函数,建构所述开源函数的函数调用图;根据所述函数调用图中的函数参数计算函数的特征分值其中,P为函数的特征分值;w是对于每个特征值所取得权重,取值在[0,1];v是每个特征值计算出得具体值;x是每个特征的系数,取值为

1或1;根据预设的动态阈值对所述特征分值进行评估,将所述特征分值小于所述动态阈值的函数设置为所述测试函数;剔除所述开源函数中的所述测试函数。4.根据权利要求3所述的开源组件函数的匹配方法,其特征在于,所述根据预设的动态阈值对所述特征分值进行评估,将所述特征分值小于所述动态阈值的函数设置为所述测试函数,之后还包括补充所述测试函数;补充所述测试函数的方法包括:从所述开源组件中提取包含所述测试函数的文件,将文件中除所述测试函数以外的函数也设置为测试函数;调用任意一个测试函数,通过所述函数调用图和组群检测算法识别测试函数,剔除不符合要求的测试函数,得到所述测试函数。5.根据权利要求1所述的开源组件函数的匹配方法,其特征在于,剔除所述工具函数的方法包括:获取所述开源函数;选取所述开源函数中任一函数,用函数分析工具生成该函数的抽象语法树和控制流图;从所述抽象语法树和所述控制流图中提取代码和函数的参数指标;
通过随机森林模型分析所述参数指标对函数的贡献度,判断该函数是否为工具函数;若是,则得到所述...

【专利技术属性】
技术研发人员:刘杨
申请(专利权)人:思探明信息科技南京有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1