检测rust源码包中第三方依赖组件的方法及装置
技术领域
1.本技术涉及计算机技术领域,具体涉及一种检测rust源码包中第三方依赖组件的方法及装置。
背景技术:2.随着近年来对软件安全关注度的提高,对软件开发提出的要求也越来越高。一个产品的高安全性,已成为产品的卖点之一。为了快速的开发出一款软件产品,往往会在项目中引入第三方组件。对于引入哪些第三方依赖组件以及是否安全,是否含有漏洞也直接影响着整个产品的安全性。因此如何检测出源码包中的第三方依赖组件就成为了一个问题。对于传统的rust源码包中第三方依赖组件的检测方式来讲,存在组件容易漏检和误检的问题。
技术实现要素:3.本技术的目的在于提供一种检测rust源码包中第三方依赖组件的方法、装置、电子设备及计算机可读存储介质,有利于避免第三方依赖组件的漏检和误检。
4.为实现上述目的,本技术提供了一种检测rust源码包中第三方依赖组件的方法,包括:
5.第一获取步骤:解析cargo.toml文件中的依赖信息部分以从所述cargo.toml文件中获取直接依赖组件的组件信息;
6.第二获取步骤:根据所述cargo.toml文件生成cargo.lock文件并从所述cargo.lock文件中获取所有组件的组件信息;
7.确定步骤:通过遍历所述第一获取步骤获取的所有直接依赖组件的组件信息确定所述第二获取步骤解析出的所有组件的组件信息中的间接依赖组件的组件信息。
8.可选地,所述第一获取步骤获取的直接依赖组件的组件信息和所述第二获取步骤获取的所有组件的组件信息均包括组件名称和组件版本信息。
9.可选地,所述第一获取步骤获取的直接依赖组件的组件信息保存至组件信息文件中;
10.所述确定步骤确定的所有间接依赖组件的组件信息添加至所述组件信息文件中。
11.可选地,所述cargo.lock文件通过在所述cargo.toml文件所在目录下执行cargo generate-lockfile命令生成。
12.为实现上述目的,本技术还提供了一种检测rust源码包中第三方依赖组件的装置,包括:
13.第一获取模块,所述解析获取模块用于解析cargo.toml文件中的依赖信息部分以从所述cargo.toml文件中获取直接依赖组件的组件信息;
14.第二获取模块,所述第二获取模块用于根据所述cargo.toml文件生成cargo.lock文件并从所述cargo.lock文件中获取所有组件的组件信息;
15.确定模块,所述确定模块用于通过遍历所述第一获取模块获取的所有直接依赖组件的组件信息确定所述第二获取模块解析出的所有组件的组件信息中的间接依赖组件的组件信息。
16.可选地,所述第一获取模块获取的直接依赖组件的组件信息和所述第二获取模块获取的所有组件的组件信息均包括组件名称和组件版本信息。
17.可选地,所述第一获取模块获取的直接依赖组件的组件信息保存至组件信息文件中;所述确定模块确定的所有间接依赖组件的组件信息添加至所述组件信息文件中。
18.可选地,所述cargo.lock文件通过在所述cargo.toml文件所在目录下执行cargo generate-lockfile命令生成。
19.为实现上述目的,本技术还提供了一种电子设备,包括:
20.处理器;
21.存储器,其中存储有所述处理器的可执行指令;
22.其中,所述处理器配置为经由执行所述可执行指令来执行如前所述的检测rust源码包中第三方依赖组件的方法。
23.为实现上述目的,本技术还提供了一种计算机可读存储介质,其上存储有程序,所述程序被处理器执行时实现如前所述的检测rust源码包中第三方依赖组件的方法。
24.本技术还提供了一种计算机程序产品或计算机程序,该计算机程序产品或计算机程序包括计算机指令,该计算机指令存储在计算机可读存储介质中。电子设备的处理器从计算机可读存储介质读取该计算机指令,处理器执行该计算机指令,使得该电子设备执行如上所述的检测rust源码包中第三方依赖组件的方法。
25.本技术通过解析cargo.toml文件中的依赖信息部分可以从cargo.toml文件中获取直接依赖组件的组件信息,通过cargo.toml文件生成cargo.lock文件可以从cargo.lock文件中获取所有组件的组件信息,进而通过遍历上述获取的所有直接依赖组件的组件信息可以确定从cargo.lock文件中获取到的所有组件的组件信息中的间接依赖组件的组件信息。即,本技术既能够检测到并确定rust源码包中的直接依赖组件,又能够检测到并确定rust源码包中的间接依赖组件,使得检测出的第三方依赖组件较为全面,有利于避免漏检和误检。
附图说明
26.图1是本技术实施例检测rust源码包中第三方依赖组件的方法的流程图。
27.图2是本技术实施例检测rust源码包中第三方依赖组件的装置的示意框图。
28.图3是本技术实施例检测电子设备的示意框图。
具体实施方式
29.为了详细说明本技术的技术内容、构造特征、所实现目的及效果,以下结合实施方式并配合附图详予说明。
30.实施例一
31.请参阅图1,本技术公开了一种检测rust源码包中第三方依赖组件的方法,包括:
32.第一获取步骤101:解析cargo.toml文件中的依赖信息部分([dependencies])以
从cargo.toml文件中获取直接依赖组件的组件信息。
[0033]
上述cargo.toml文件是指构建rust项目的cargo包管理器用于储存项目基本信息以及依赖组件信息的文件。
[0034]
具体地,第一获取步骤101获取的直接依赖组件的组件信息均包括组件名称和组件版本信息。
[0035]
第二获取步骤102:根据cargo.toml文件生成cargo.lock文件并从cargo.lock文件中获取所有组件的组件信息。其中获取到的组件信息包括直接依赖组件的组件信息和间接依赖组件的组件信息,但是这里无法区分获取到的组件信息到底是直接依赖组件的组件信息还是间接依赖组件的组件信息。另外,此处获取到的所有组件的组件信息指的是基于获取算法实际获取到的全部组件的组件信息,并不一定是cargo.lock文件中涉及的全部组件的组件信息,因为在实际获取时,有可能存在无法获取完全的情况。
[0036]
具体地,第二获取步骤102获取的所有组件的组件信息均包括组件名称和组件版本信息。
[0037]
具体地,cargo.lock文件通过在cargo.toml文件所在目录下执行cargo generate-lockfile命令生成。
[0038]
具体地,cargo.lock文件中组件的组件信息通过解析cargo.lock文件中的[package]部分获取。
[0039]
关于cargo.lock文件为本领域技术人员所知悉,这里不作进一步详述。
[0040]
需要注意的是,本技术并不限制第一获取步骤101和第二获取步骤102的先后顺序,也就是说并不局限于图1中的执行顺序。
[0041]
确定步骤103:通过遍历第一获取步骤101获取的所有直接依赖组件的组件信息确定第二获取步骤102解析出的所有组件的组件信息中的间接依赖组件的组件信息。
[0042]
由于第二获取步骤102中,从cargo.lock文件中获取到的所有组件的组件信息无法确定到底是直接依赖组件还是间接依赖组件的组件信息,而第一获取步骤101可以获取到rust源码包涉及的所有直接依赖组件的组件信息,因此通过遍历第一获取步骤101获取的所有直接依赖组件的组件信息,可以确定第二获取步骤102解析出的所有组件信息中属于直接依赖组件的组件信息,进而也就确定了第二获取步骤102解析出的所有组件信息中属于间接依赖组件的组件信息,进而在第一获取步骤101获取到直接依赖组件的组件信息的情况下,通过确定步骤103获取到了间接依赖组件的组件信息。
[0043]
本技术通过解析cargo.toml文件中的依赖信息部分可以从cargo.toml文件中获取直接依赖组件的组件信息,通过cargo.toml文件生成cargo.lock文件可以从cargo.lock文件中获取所有组件的组件信息,进而通过遍历上述获取的所有直接依赖组件的组件信息可以确定从cargo.lock文件中获取到的所有组件的组件信息中的间接依赖组件的组件信息。即,本技术既能够检测到并确定rust源码包中的直接依赖组件,又能够检测到并确定rust源码包中的间接依赖组件,使得检测出的第三方依赖组件较为全面,有利于避免漏检和误检。
[0044]
具体地,在本实施例中,第一获取步骤101获取的直接依赖组件的组件信息保存至组件信息文件中;确定步骤103确定的所有间接依赖组件的组件信息添加至组件信息文件中。当然,并局限于此。
[0045]
实施例二
[0046]
本技术公开了一种检测rust源码包中第三方依赖组件的装置,包括:
[0047]
第一获取模块201,第一获取模块201用于解析cargo.toml文件中的依赖信息部分以从cargo.toml文件中获取直接依赖组件的组件信息。
[0048]
具体地,第一获取模块201获取的直接依赖组件的组件信息均包括组件名称和组件版本信息。
[0049]
第二获取模块202,第二获取模块202用于根据cargo.toml文件生成cargo.lock文件并从cargo.lock文件中获取所有组件的组件信息。其中获取到的组件信息包括直接依赖组件的组件信息和间接依赖组件的组件信息,但是这里无法区分获取到的组件信息到底是直接依赖组件的组件信息还是间接依赖组件的组件信息。另外,此处获取到的所有组件的组件信息指的是基于获取算法实际获取到的全部组件的组件信息,并不一定是cargo.lock文件中涉及的全部组件的组件信息,因为在实际获取时,有可能存在无法获取完全的情况。
[0050]
具体地,第二获取模块202获取的所有组件的组件信息均包括组件名称和组件版本信息。
[0051]
具体地,cargo.lock文件通过在cargo.toml文件所在目录下执行cargo generate-lockfile命令生成。
[0052]
具体地,cargo.lock文件中组件的组件信息通过解析cargo.lock文件中的[package]部分获取。
[0053]
关于cargo.lock文件为本领域技术人员所知悉,这里不作进一步详述。
[0054]
确定模块203,确定模块203用于通过遍历第一获取模块201获取的所有直接依赖组件的组件信息确定第二获取模块202解析出的所有组件的组件信息中的间接依赖组件的组件信息。
[0055]
由于第二获取模块202中,从cargo.lock文件中获取到的所有组件的组件信息无法确定到底是直接依赖组件还是间接依赖组件的组件信息,而第一获取模块201可以获取到rust源码包涉及的所有直接依赖组件的组件信息,因此通过遍历第一获取模块201获取的所有直接依赖组件的组件信息,可以确定第二获取模块202解析出的所有组件信息中属于直接依赖组件的组件信息,进而也就确定了第二获取模块202解析出的所有组件信息中属于间接依赖组件的组件信息。
[0056]
本技术通过解析cargo.toml文件中的依赖信息部分可以从cargo.toml文件中获取直接依赖组件的组件信息,通过cargo.toml文件生成cargo.lock文件可以从cargo.lock文件中获取所有组件的组件信息,进而通过遍历上述获取的所有直接依赖组件的组件信息可以确定从cargo.lock文件中获取到的所有组件的组件信息中的间接依赖组件的组件信息。即,本技术既能够检测到并确定rust源码包中的直接依赖组件,又能够检测到并确定rust源码包中的间接依赖组件,使得检测出的第三方依赖组件较为全面,有利于避免漏检和误检。
[0057]
实施例三
[0058]
本技术公开了一种电子设备,包括:
[0059]
处理器30;
[0060]
存储器40,其中存储有处理器30的可执行指令;
[0061]
其中,处理器30配置为经由执行可执行指令来执行如前所述的检测rust源码包中第三方依赖组件的方法。
[0062]
实施例四
[0063]
本技术公开了一种计算机可读存储介质,其上存储有程序,程序被处理器执行时实现如前所述的检测rust源码包中第三方依赖组件的方法。
[0064]
实施例五
[0065]
本技术实施例公开了一种计算机程序产品或计算机程序,该计算机程序产品或计算机程序包括计算机指令,该计算机指令存储在计算机可读存储介质中。电子设备的处理器从计算机可读存储介质读取该计算机指令,处理器执行该计算机指令,使得该电子设备执行上述检测rust源码包中第三方依赖组件的方法。
[0066]
应当理解,在本技术实施例中,所称处理器可以是中央处理模块(centralprocessing unit,cpu),该处理器还可以是其他通用处理器、数字信号处理器(digitalsignal processor,dsp)、专用集成电路(application specificintegrated circuit,asic)、现成可编程门阵列(field-programmable gate array,fpga)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。
[0067]
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序指令相关的硬件来完成,的程序可存储于一计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。其中,的存储介质可为磁碟、光盘、只读存储记忆体(read-onlymemory,rom)或随机存储记忆体(random accessmemory,ram)等。
[0068]
以上所揭露的仅为本技术的较佳实例而已,不能以此来限定本技术之权利范围,因此依本技术权利要求所作的等同变化,均属于本技术所涵盖的范围。