[发明专利]用于快速全网代码溯源检测的代码库设计方法及检测方法在审
申请号: | 202110278117.6 | 申请日: | 2021-03-10 |
公开(公告)号: | CN112988217A | 公开(公告)日: | 2021-06-18 |
发明(设计)人: | 周明辉;高恺;何昊 | 申请(专利权)人: | 北京大学 |
主分类号: | G06F8/70 | 分类号: | G06F8/70;G06F8/71 |
代理公司: | 北京万象新悦知识产权代理有限公司 11360 | 代理人: | 黄凤茹 |
地址: | 100871*** | 国省代码: | 北京;11 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 用于 快速 代码 溯源 检测 设计 方法 | ||
本发明公布了一种用于快速全网代码溯源检测的代码库设计方法,通过项目发现、数据提取、数据存储、代码信息映射构建和数据更新过程,针对全网使用Git开源项目内的Git对象进行高效存储而得到代码库,并实现代码库的高效更新;包括:采用按Git对象分类型分块存储的存储模式;构建代码文件到代码文件信息之间的关系映射,对代码文件的全网信息进行快速检索;对构建的超大规模的代码库采用高效更新方式,基于Libgit2函数库提出定制化的git fetch协议,以构建的超大规模的代码库为后端,高效获得远程仓库的新增的Git对象数据。采用本发明方法生成的代码库可定期高效地更新,并支持对代码在文件粒度上的快速全网溯源检测,检测效率高。
技术领域
本发明提供一种用于快速全网代码溯源检测的代码库设计方法及基于代码库快速全网代码溯源检测方法,属于软件工程技术领域。
背景技术
随着开源软件的蓬勃发展,网上积累了海量的优秀开源软件资源,软件开发也越来越多地使用开源代码。开源代码的使用在提高软件开发效率的同时,也引入了风险,比如如果不了解开源代码的来源,就不能对该开源代码后续的漏洞修复同步更新,同时还会将自己暴露在许可证合规风险和知识产权等法律风险之中,带来不同程度的安全威胁及经济或名誉损失。著名的开源风险案例是心脏出血漏洞(heartbleed)。它是一个出现在加密程序库OpenSSL的安全漏洞,该程序库广泛用于实现互联网的传输层安全协议。它于2012年被引入了OpenSSL中,2014年4月首次向公众披露。只要使用的是存在缺陷的OpenSSL实例,无论是服务器还是客户端,都可能因此而受到攻击。因此,对软件产品中的代码进行溯源检测对于软件产品至关重要。
为了实现软件产品的代码溯源检测,需要构建用于代码匹配搜索的代码库,代码库中包含的代码数量和构建方式直接影响代码溯源检测的准确度和效率。囿于大型代码库构建的难度,现有代码溯源检测技术大都是在假设已有海量代码库的前提下提出高效的代码检测算法,比如,研究从海量的开源软件库中选取代码最有可能被使用的开源软件参与溯源比对。而缺乏如何构建代码库的有效技术。现有技术中,通常采用下载若干开源软件到本地以形成代码库。但是,这些代码库存在项目涵盖范围小而不足于支撑对代码进行全网溯源检测、代码库架构设计不良导致进行代码溯源检测效率不高等问题。
发明内容
针对现有技术存在的技术问题,本发明提供了一种用于快速全网代码溯源检测的代码库设计方法,并基于代码库实现快速全网代码溯源检测,采用本发明方法生成的代码库可以支持对代码在文件粒度上的快速全网溯源检测,检测效率高。同时,该代码库可以定期高效地更新。
本发明中,“全网代码”指的是搜集的绝大多数开源代码托管平台的代码数据。托管在代码托管平台上的仓库称为远程仓库;将远程仓库克隆到本地后为本地仓库;本发明设计用于快速全网代码溯源检测的代码库是将远程仓库克隆到本地形成本地仓库,再从本地仓库中提取数据而形成的数据库。
本发明提供的用于快速全网代码溯源检测的代码库设计利用了Git的内部原理和哈希值,具体包括:
1)通过git clone命令可以将远程仓库下载到本地,通过git fetch命令可以将远程仓库的更新传送回本地。git fetch通过比较本地仓库和远程仓库的heads来计算出本地仓库相比远程仓库缺少什么对象,然后远程仓库将这些缺少的对象传输回本地。
2)Git使用四种类型的数据对象进行版本控制,这些对象的引用是基于该对象的内容计算的SHA1值。commit对象表示对项目的一次更改,包含一个包括提交父对象(如果有的话)的SHA1、文件夹(tree对象)、作者ID和时间戳、提交者ID和时间戳,以及提交信息。tree对象表示项目内的一个文件夹,是一个列表,其中包含了该文件夹中的文件(blob)和子文件夹(其他tree对象)的SHA1,以及它们相关的模式、类型和名称。blob对象是某个版本的文件内容(源代码)的压缩版本。tag对象是一个用于将可读名称与版本库的特定版本关联的字符串。一个commit代表一次代码更改,通常包括对若干个文件(blob)的修改。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于北京大学,未经北京大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/202110278117.6/2.html,转载请声明来源钻瓜专利网。
- 上一篇:一种服装表演用衣物陈列架
- 下一篇:一种房屋隔音降噪器