1.一种混源文件许可冲突检测方法,其特征在于,所述方法包括:
步骤1)构建代码许可库和特征知识库:定期从开源许可证信息网站爬取许可证信息和特征知识库信息,对许可证信息进行收集以构建代码许可库,对特征知识库信息进行特征值提取以构建特征知识库;
步骤2)混源文件特征值提取:获取混源文件,分析混源文件的文件信息以获取文件名称、文件大小和文件哈希值,分析混源文件中每一个函数的函数信息以获得所述函数的函数名称、函数大小、函数长度和函数哈希值;
步骤3)获取混源文件的允许属性:当所述混源文件中存在license文件即许可证文件时,将所述混源文件的允许属性设置为所述license文件的允许属性,当所述混源文件中不存在license文件时,将所述混源文件的允许属性设置为所述混源文件所在项目的项目属性;
步骤4)获取目标开源文件的限制属性:将所述混源文件的文件哈希值与所述特征知识库中各个开源文件的各个哈希值分别进行匹配,以将匹配到的哈希值对应的开源文件作为目标开源文件,获取所述目标开源文件的限制属性,在匹配失败时,将所述混源文件使用的第三方文件的文件哈希值与所述特征知识库中各个开源文件哈希值分别进行匹配,以将匹配到的哈希值对应的开源文件作为目标开源文件,获取所述目标开源文件的限制属性,在匹配仍失败时,将所述混源文件的每一个函数和函数哈希值与所述特征知识库中各个开源文件内各个函数的函数哈希值进行匹配,以将匹配到的函数哈希值对应的函数所在的开源文件作为目标开源文件,获取所述目标开源文件的限制属性;
步骤5)将所述混源文件的允许属性与所述目标开源文件的限制属性进行比较,以在相同时,记录所述混源文件的许可证协议合规性为冲突,否则,记录所述混源文件的许可证协议合规性为不冲突;
步骤6)当步骤5)结果为不冲突时,将所述混源文件的每一个目标开源文件的限制属性与所述混源文件的其他各个目标开源文件的允许属性分别进行比较,以在与某一个目标开源文件的允许属性相同时,记录所述混源文件的许可证协议合规性为冲突,否则,记录所述混源文件的许可证协议合规性为不冲突;
步骤7)当步骤5)和步骤6)结果都为不冲突时,将所述混源文件的每一个目标开源文件的允许属性与所述混源文件的其他各个目标开源文件的限制属性分别进行比较,以在与某一个目标开源文件的限制属性相同时,记录所述混源文件的许可证协议合规性为冲突,否则,记录所述混源文件的许可证协议合规性为不冲突;
步骤8)在记录所述混源文件的许可证协议合规性为冲突,将所述混源文件标记为不合格,否则,标记为合格。
2.如权利要求1所述的混源文件许可冲突检测方法,其特征在于:
在步骤3)中,当所述混源文件中存在license文件时,对所述license文件进行分析以获得license文件的许可证协议类型名称、允许属性、限制属性和条件属性。
3.如权利要求2所述的混源文件许可冲突检测方法,其特征在于:
在步骤4)中,将所述混源文件的每一个函数和函数哈希值与所述特征知识库中各个开源文件内各个函数的函数哈希值进行匹配,以将匹配到的函数哈希值对应的函数所在的开源文件作为目标开源文件之后,记录匹配到的函数哈希值对应的函数所在的开源文件所在的工程名称和版本信息。
4.如权利要求3所述的混源文件许可冲突检测方法,其特征在于:
在步骤4)中,将所述混源文件的每一个函数和函数哈希值与所述特征知识库中各个开源文件内各个函数的函数哈希值进行匹配,以将匹配到的函数哈希值对应的函数所在的开源文件作为目标开源文件之后,设置所述混源文件的开源率为所述混源文件中匹配成功的函数的个数/所述混源文件中函数总个数*100%,设置所述目标开源文件与所述混源文件的相似度为所述混源文件中匹配成功且位于所述目标开源文件中的函数的个数/所述混源文件中函数总个数*100%。
5.如权利要求4所述的混源文件许可冲突检测方法,其特征在于:
在步骤4)中,还根据所述混源文件的文件哈希值从漏洞库查询对应的漏洞信息并记录。