本技术涉及网络安全,尤其涉及一种开源许可证检测方法、电子设备、介质及计算机程序产品。
背景技术:
1、开源许可证声明该开源软件的使用条件、约束条款以及合法利益,是开源软件作者和基于开源软件的软件工程使用者之间的合法的、有约束力的合同。为遵守开源软件的开源许可证,避免违反许可证条款而产生的额外法律成本,需要企业检测是否存在及是否遵守开源许可证。目前的开源许可证检测方案是金字塔依赖,由下向上逐层依赖。最底层为单开源许可证检测、中间层为多开源许可证依赖检测,最上层为自动遵守开源许可证的相关工具。如果下层的数据不准确或者不具备,则上层的分析逻辑不准确。也就是对源代码的依赖程度过高,进而导致获取得到的开源许可证的准确性低。因此如何降低对源代码的依赖程度,提高开源许可证的准确性和可靠性成为目前急需解决的技术问题。
技术实现思路
1、本发明的主要目的在于提供一种开源许可证检测方法、电子设备、介质及计算机程序产品,旨在解决降低对源代码的依赖程度,提高开源许可证的准确性和可靠性。
2、为实现上述目的,本技术提供了一种开源许可证检测方法,包括:
3、基于开源仓库管理器,建立开源软件特征库,其中,所述开源软件特征库包括开源软件文件库、开源软件语法特征库和开源软件许可证库;
4、获取待识别代码,并根据所述待识别代码的来源将所述待识别代码分为第三方组件和企业自研代码;
5、针对所述第三方组件,确定所述第三方组件对应的第一文件列表,若在所述开源软件文件库对应的文件特征库中存在与所述第一文件列表匹配的第二文件列表,则确定并输出所述开源软件许可证库中与所述第二文件列表对应的开源许可证;
6、针对所述企业自研代码,确定所述企业自研代码对应的待识别语法特征,若在所述开源软件语法特征库中存在和所述待识别语法特征匹配的第一语法特征,则确定并输出所述开源软件许可证库中与所述第一语法特征对应的开源许可证。
7、可选地,基于开源仓库管理器,建立开源软件特征库的步骤,包括:
8、通过所述开源仓库管理器将预设的开源软件的源代码转换为多个词法单元;
9、将所述多个词法单元以预设的语法结构的形式进行拼接,得到语法树;
10、对所述语法树进行无用树节点剪裁,得到目标语法树,依据所述目标语法树构建开源软件语法特征库,其中,开源软件语法特征库中的第一语法特征包括所述目标语法树中的最小识别单元。
11、可选地,基于开源仓库管理器,建立开源软件特征库的步骤,还包括:
12、依据所述开源仓库管理器缓存预设的开源软件信息;
13、依据所述开源软件信息确定每个开源软件包含的所有开源组件,以及每个开源组件对应的文件列表,依据每个开源组件对应的文件列表构建开源软件文件库。
14、可选地,基于开源仓库管理器,建立开源软件特征库的步骤,还包括:
15、依据所述开源仓库管理器获取每个开源软件的开源软件名称,根据每个所述开源软件的开源软件名称确定每个所述开源软件的gav坐标;
16、在预设的maven中心仓库中获取与每个所述gav坐标对应的开源许可证,并根据所述开源许可证构建开源软件许可证库。
17、可选地,确定所述第三方组件对应的第一文件列表的步骤之后,包括:
18、将第一文件列表进行一维数据特征转换,得到第一文件特征;
19、确定所述开源软件文件库对应的文件特征库,并确定所述文件特征库中每个开源组件对应的文件列表的第二文件特征;
20、确定所述第一文件特征与每个第二文件特征之间的第一相似度,若存在大于第一预设阈值的第一相似度,则确定所述文件特征库中大于第一预设阈值的第一相似度对应的文件列表为第二文件列表;
21、所述确定并输出所述开源软件许可证库中与所述第二文件列表对应的开源许可证的步骤,包括:
22、确定所述第二文件列表对应的第一开源组件名称,在所述开源软件许可证库中确定与所述第一开源组件名称对应的开源许可证,并输出所述开源许可证。
23、可选地,确定所述第二文件列表对应的第一开源组件名称的步骤,包括:
24、若存在多个第二文件列表,将每个所述第二文件列表对应的开源组件作为第一开源组件;
25、确定每个第一开源组件对应的版本号,并依据各所述版本号选择最高版本号对应的第一开源组件的名称作为第一开源组件名称。
26、可选地,确定所述企业自研代码对应的待识别语法特征的步骤之后,包括:
27、确定所述开源软件语法特征库中每个开源软件对应的所有语法特征;
28、针对每个开源软件,根据预设的最长公共序列模型计算所述待识别语法特征与所述所有语法特征之间的第二相似度;
29、若存在大于第二预设阈值的第二相似度,则确定大于第二预设阈值的第二相似度对应的语法特征为第一语法特征;
30、所述确定并输出所述开源软件许可证库中与所述第一语法特征对应的开源许可证的步骤,包括:
31、确定所述第一语法特征对应的开源软件中第二开源组件名称,在所述开源软件许可证库中确定与所述第二开源组件名称对应的开源许可证,并输出所述开源许可证。
32、此外,为实现上述目的,本技术还提供一种开源许可证检测装置,包括:
33、建立模块,用于基于开源仓库管理器,建立开源软件特征库,其中,所述开源软件特征库包括开源软件文件库、开源软件语法特征库和开源软件许可证库;
34、获取模块,用于获取待识别代码,并根据所述待识别代码的来源将所述待识别代码分为第三方组件和企业自研代码;
35、第三方组件模块,用于针对所述第三方组件,确定所述第三方组件对应的第一文件列表,若在所述开源软件文件库对应的文件特征库中存在与所述第一文件列表匹配的第二文件列表,则确定并输出所述开源软件许可证库中与所述第二文件列表对应的开源许可证;
36、企业自研代码模块,用于针对所述企业自研代码,确定所述企业自研代码对应的待识别语法特征,若在所述开源软件语法特征库中存在和所述待识别语法特征匹配的第一语法特征,则确定并输出所述开源软件许可证库中与所述第一语法特征对应的开源许可证。
37、此外,为实现上述目的,本技术还提供了一种电子设备,上述电子设备包括:存储器、处理器及存储在上述存储器上并可在上述处理器上运行的开源许可证检测程序,上述开源许可证检测程序被上述处理器执行时实现如上述的开源许可证检测方法的步骤。
38、此外,为实现上述目的,本技术还提供了一种介质,介质包括计算机可读存储记载,上述计算机存储介质上存储有开源许可证检测程序,上述开源许可证检测程序被处理器执行时实现如上述的开源许可证检测方法的步骤。
39、此外,为实现上述目的,本发明还提供一种计算机程序产品,所述计算机程序产品包括开源许可证检测程序,所述开源许可证检测程序被处理器执行时实现如上文所述的开源许可证检测方法的步骤。
40、本技术实施例通过基于开源仓库管理器建立开源软件特征库,且开源软件特征库包括开源软件文件库、开源软件语法特征库和开源软件许可证库。根据待识别代码的来源将待识别代码分为第三方组件和企业自研代码。针对第三方组件,将第三方组件对应的第一文件列表与开源软件文件库对应的文件特征库进行匹配,以确定匹配的第二文件列表,进而确定并输出开源软件许可证库中与第二文件列表对应的开源许可证。针对企业自研代码,将待识别语法特征与开源软件语法特征库进行匹配,以确定匹配的第一语法特征,进而确定并输出开源软件许可证库中与第一语法特征对应的开源许可证。进而可以直接依据开源软件特征库确定待识别代码对应的开源许可证,可以实现在缺乏待识别代码对应的源代码的情况下,通过根据文件列表之间的相似性,或者是根据语法特征之间的相似性来获取开源许可证,降低了对源代码的依赖程度。并且可以通过根据源代码的类型进行分类,根据开源软件文件库对应的文件特征库和开源软件许可证库来确定企业自研代码对应的开源许可证,根据开源软件语法特征库和开源软件许可证库来确定第三方组件对应的开源许可证。进而可以避免需要开源组件自身包含开源许可证信息,如果开源组件只在官网声明开源许可但在发行包中没有包含许可证文件则无法获取许可证信息的现象发生。通过不直接从发行包包中获取开源许可证,而是通过开源软件特征库来确定获取开源许可证,进而可以提高开源许可证的准确性和可靠性。
1.一种开源许可证检测方法,其特征在于,所述开源许可证检测方法,包括以下步骤:
2.如权利要求1所述的开源许可证检测方法,其特征在于,基于开源仓库管理器,建立开源软件特征库的步骤,包括:
3.如权利要求1所述的开源许可证检测方法,其特征在于,所述基于开源仓库管理器,建立开源软件特征库的步骤,还包括:
4.如权利要求1所述的开源许可证检测方法,其特征在于,所述基于开源仓库管理器,建立开源软件特征库的步骤,还包括:
5.如权利要求1所述的开源许可证检测方法,其特征在于,所述确定所述第三方组件对应的第一文件列表的步骤之后,包括:
6.如权利要求5所述的开源许可证检测方法,其特征在于,所述确定所述第二文件列表对应的第一开源组件名称的步骤,包括:
7.如权利要求1所述的开源许可证检测方法,其特征在于,所述确定所述企业自研代码对应的待识别语法特征的步骤之后,包括:
8.一种电子设备,其特征在于,所述电子设备包括:存储器、处理器及存储在所述存储器上并可在所述处理器上运行的开源许可证检测程序,所述开源许可证检测程序被所述处理器执行时实现如权利要求1至7中任一项所述的开源许可证检测方法的步骤。
9.一种介质,其特征在于,所述介质包括计算机可读存储介质,所述计算机可读存储介质上存储有开源许可证检测程序,所述开源许可证检测程序被处理器执行时实现如权利要求1至7中任一项所述的开源许可证检测方法的步骤。
10.一种计算机程序产品,其特征在于,所述计算机程序产品包括开源许可证检测程序,所述开源许可证检测程序被处理器执行时实现如权利要求1至7中任一项所述的开源许可证检测方法的步骤。