【技术实现步骤摘要】
源代码扫描方法、装置、电子设备和存储介质
本专利技术涉及计算机领域,具体涉及一种源代码扫描方法、装置、电子设备和存储介质。
技术介绍
静态源代码扫描(StaticCodeAnalysis)是近年被人提及较多的软件应用安全解决方案之一,它是指在软件工程中,源代码无需经过编译器编译,直接被一些扫描工具扫描出其中的一些缺陷、漏洞等,从而帮助开发人员快速查找、定位、修复和管理源代码中的安全风险。然而,目前静态源代码扫描方法往往会出现漏报等问题,因此,目前源代码扫描方法的效率低下。
技术实现思路
本专利技术实施例提供一种源代码扫描方法、装置、电子设备和存储介质,可以提升源代码扫描的效率。本专利技术实施例提供一种源代码扫描方法,包括:获取源代码,源代码包括目标函数;对目标函数进行等效转换处理,得到目标函数对应的至少一个转换函数;采用转换函数对源代码中的目标函数进行替代处理,得到替代代码;基于替代代码构造抽象语法树;基于预设的缺陷检测规则,对抽象语法树进行缺陷扫描 ...
【技术保护点】
1.一种源代码扫描方法,其特征在于,包括:/n获取源代码,所述源代码包括目标函数;/n对所述目标函数进行等效转换处理,得到所述目标函数对应的至少一个转换函数;/n采用所述转换函数对所述源代码中的所述目标函数进行替代处理,得到替代代码;/n基于所述替代代码构造抽象语法树;/n基于预设的缺陷检测规则,对所述抽象语法树进行缺陷扫描,得到所述源代码中缺陷的扫描结果。/n
【技术特征摘要】
1.一种源代码扫描方法,其特征在于,包括:
获取源代码,所述源代码包括目标函数;
对所述目标函数进行等效转换处理,得到所述目标函数对应的至少一个转换函数;
采用所述转换函数对所述源代码中的所述目标函数进行替代处理,得到替代代码;
基于所述替代代码构造抽象语法树;
基于预设的缺陷检测规则,对所述抽象语法树进行缺陷扫描,得到所述源代码中缺陷的扫描结果。
2.如权利要求1所述的源代码扫描方法,其特征在于,所述基于所述替代代码构造抽象语法树,包括:
确定所述替代代码中调用所述转换函数的数组对象,以及所述转换函数的函数参数;
当所述转换函数为内存分配函数时,基于所述函数参数确定所述转换函数的返回值;
在所述替代代码中定义所述转换函数的返回值,以及,将调用所述转换函数的数组对象修改为所述数组对象指向所述目标函数的返回值,得到再次替代代码;
基于所述再次替代代码构造抽象语法树。
3.如权利要求1所述的源代码扫描方法,其特征在于,所述源代码包括第一函数,所述基于所述替代代码构造抽象语法树之后,还包括:
确定所述第一函数的函数体,以及所述函数体中的外部变量参数;
确定所述第一函数的函数体在所述抽象语法树中的位置;
将所述位置保存在调用关系表中。
4.如权利要求3所述的源代码扫描方法,其特征在于,所述源代码包括调用所述第一函数的第二函数,所述基于预设的缺陷检测规则,对所述抽象语法树进行缺陷扫描,得到所述源代码中缺陷的扫描结果,包括:
当在所述抽象语法树中扫描到所述第二函数时,基于所述调用关系表在所述抽象语法树中确定下一扫描位置;
基于所述下一扫描位置确定第一函数的函数体,以及所述函数体中的外部变量参数;
基于预设的缺陷检测规则,采用所述函数体和所述函数体中的外部变量参数对所述抽象语法树进行缺陷扫描,得到所述源代码中缺陷的扫描结果。
5.如权利要求1所述的源代码扫描方法,其特征在于,所述抽象语法树包括循环结构,所述基于预设的缺陷检测规则,对所述抽象语法树进行缺陷扫描,得到所述源代码中缺陷的扫描结果,包括:
在对所述循环结构中的局部变量进行扫描时,确定所述局部变量的当前定值;
基于预设的缺陷检测规则和所述局部变量的当前定值,对所述抽象语法树中所述局部变量进行一次缺陷扫描,得到所述局部变量的缺陷的扫描结果。
6.如权利要求5所述的源代码扫描方法,其特征在于,所述在对所述循环结构中的局部变量进行扫描时,确定所述局部变量的当前定值之前,还包括:
定义局部变量的第一数据结构;
所述在对所述循环结构中的局部变量进行扫描时,确定所述局部变量的当前定值,包括:
当扫描到所述循环结构中的局部变量时,从所述第一数据结构获取所述局部变量的上一定值;
基于所述上一定值,计算所述局部变量的当前定值;
将所述局部变量的当前定值存入所述局部变量的所述第一数据结构;
重新扫描所述循环结构。
7.如权利要求6所述的源代码扫描方法,其特征在于,所述重新扫描所述循环结构,还包括:
确定所述循环结构的循环类型、循环条件阈值;
当所述循环类型为目标循环类型时,确定所述局部变量的变化类型;
当所述局部变量的变...
【专利技术属性】
技术研发人员:钱文祥,
申请(专利权)人:腾讯科技深圳有限公司,
类型:发明
国别省市:广东;44
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。