静态源码扫描方法、装置、计算机设备及存储介质制造方法及图纸

技术编号:19964687 阅读:20 留言:0更新日期:2019-01-03 13:03
本申请提出一种静态源码扫描方法、装置、计算机设备及存储介质,其中,方法包括:获取待扫描源码对应的抽象语法树;对所述抽象语法树中的代码信息进行解析,生成与所述抽象语法树对应的执行链集合,其中,执行链集合中每条执行链分别与源码中的一条执行路径对应;对所述执行链集合中的每条执行链进行遍历,以确定所述源码中是否包含缺陷代码。通过本方法,只需分析每条执行链即可确定缺陷代码,分析过程简单、可靠,提高了分析效率,解决了现有技术中先将源代码转换为对应的控制流图,再对控制流图进行遍历分析实现源代码的静态扫描,分析过程复杂、效率低的技术问题。

Static Source Scanning Method, Device, Computer Equipment and Storage Media

This application proposes a static source code scanning method, device, computer equipment and storage medium, in which methods include: acquiring an abstract grammar tree corresponding to the source code to be scanned; parsing the code information in the abstract grammar tree, generating a set of execution chains corresponding to the abstract grammar tree, in which each execution chain in the set of execution chains is separately tied to one of the source codes. Line paths correspond; each execution chain in the set of execution chains is traversed to determine whether the source code contains defective code. Through this method, the defect code can be determined only by analyzing each execution chain. The analysis process is simple and reliable, which improves the analysis efficiency. It solves the technical problems of complex and inefficient analysis process by converting the source code into the corresponding control flow chart and then traversing the control flow chart to realize the static scanning of the source code.

【技术实现步骤摘要】
静态源码扫描方法、装置、计算机设备及存储介质
本申请涉及数据处理
,尤其涉及一种静态源码扫描方法、装置、计算机设备及存储介质。
技术介绍
静态源代码扫描是近年被人们提及较多的软件应用安全解决方案之一,是指在软件工程中,程序员在写好源代码后,对编写完成的源代码进行扫描,以找出源代码当中存在的缺陷,保证软件质量。目前,相关技术中,对源代码进行静态扫描时,多是通过各种方式将源代码转换为控制流图,再采用多种算法对控制流图进行遍历分析,以对源代码进行缺陷检测。这种静态扫描方式,分析过程复杂,并且对不同的分析目标需要编写对应的遍历程序,效率低。
技术实现思路
本申请旨在至少在一定程度上解决相关技术中的技术问题之一。为此,本申请的提出一种静态源码扫描方法、装置、计算机设备及存储介质,用于解决现有技术中先将源代码转换为对应的控制流图,再对控制流图进行遍历分析实现源代码的静态扫描,分析过程复杂、效率低的技术问题。为达上述目的,本申请第一方面实施例提出了一种静态源码扫描方法,包括:获取待扫描源码对应的抽象语法树;对所述抽象语法树中的代码信息进行解析,生成与所述抽象语法树对应的执行链集合,其中,执行链集合中每条执行链分别与源码中的一条执行路径对应;对所述执行链集合中的每条执行链进行遍历,以确定所述源码中是否包含缺陷代码。本申请实施例的静态源码扫描方法,通过获取待扫描源码对应的抽象语法树,对抽象语法树中的代码信息进行解析,生成与抽象语法树对应的执行链集合,进而对执行链集合中的每条执行链进行遍历,以确定源码中是否包含缺陷代码。由此,通过将源码转换为抽象语法树,而抽象语法树自身包含了源码的所有信息,从而可以直接根据抽象语法树获取所有可能的执行链,进而对每条执行链进行遍历,即可确定缺陷代码,分析过程简单、可靠,提高了分析效率。为达上述目的,本申请第二方面实施例提出了一种静态源码扫描装置,包括:获取模块,用于获取待扫描源码对应的抽象语法树;生成模块,用于对所述抽象语法树中的代码信息进行解析,生成与所述抽象语法树对应的执行链集合,其中,执行链集合中每条执行链分别与源码中的一条执行路径对应;遍历模块,用于对所述执行链集合中的每条执行链进行遍历,以确定所述源码中是否包含缺陷代码。本申请实施例的静态源码扫描装置,通过获取待扫描源码对应的抽象语法树,对抽象语法树中的代码信息进行解析,生成与抽象语法树对应的执行链集合,进而对执行链集合中的每条执行链进行遍历,以确定源码中是否包含缺陷代码。由此,通过将源码转换为抽象语法树,而抽象语法树自身包含了源码的所有信息,从而可以直接根据抽象语法树获取所有可能的执行链,进而对每条执行链进行遍历,即可确定缺陷代码,分析过程简单、可靠,提高了分析效率。为达上述目的,本申请第三方面实施例提出了一种计算机设备,包括:处理器和存储器;其中,所述处理器通过读取所述存储器中存储的可执行程序代码来运行与所述可执行程序代码对应的程序,以用于实现如第一方面实施例所述的静态源码扫描方法。为达上述目的,本申请第四方面实施例提出了一种非临时性计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现如第一方面实施例所述的静态源码扫描方法。为达上述目的,本申请第五方面实施例提出了一种计算机程序产品,当所述计算机程序产品中的指令由处理器执行时实现如第一方面实施例所述的静态源码扫描方法。本申请附加的方面和优点将在下面的描述中部分给出,部分将从下面的描述中变得明显,或通过本申请的实践了解到。附图说明本申请上述的和/或附加的方面和优点从下面结合附图对实施例的描述中将变得明显和容易理解,其中:图1为本申请实施例所提供的一种静态源码扫描方法的流程示意图;图2(a)为源码转换为抽象语法树的示例图一;图2(b)为源码转换为抽象语法树的示例图二;图3为本申请实施例所提供的另一种静态源码扫描方法的流程示意图;图4(a)为执行链中的语句可拆解的示例图;图4(b)为将子执行链合并至主执行链后的示例图;图5为本申请实施例所提供的又一种静态源码扫描方法的流程示意图;图6为本申请实施例所提供的一种静态源码扫描装置的结构示意图;图7为本申请实施例所提供的另一种静态源码扫描装置的结构示意图;图8为本申请实施例所提供的又一种静态源码扫描装置的结构示意图;以及图9为本申请实施例所提供的计算机设备的结构示意图。具体实施方式下面详细描述本申请的实施例,所述实施例的示例在附图中示出,其中自始至终相同或类似的标号表示相同或类似的元件或具有相同或类似功能的元件。下面通过参考附图描述的实施例是示例性的,旨在用于解释本申请,而不能理解为对本申请的限制。下面参考附图描述本申请实施例的静态源码扫描方法、装置、计算机设备及存储介质。图1为本申请实施例所提供的一种静态源码扫描方法的流程示意图。如图1所示,该静态源码扫描方法可以包括以下步骤:步骤101,获取待扫描源码对应的抽象语法树。抽象语法树(AbstractSyntaxTree,AST)是源代码的抽象语法结构的树状表现形式,具有不依赖于具体文法和语言细节的特点,有利于减少代码分析过程中的工作量。本实施例中,对于待扫描的源码,可以获取对应的抽象语法树。具体地,可以借助于语法分析器,将待扫描源码通过语法分析器,转换为对应的抽象语法树。比如,语法分析器可以为ANTLR、PHP-Parser、EclipseJDT、Clang、JavaCC等。举例而言,假设待扫描源码如下:则,对该待扫描源码进行转换后,得到的抽象语法树如图2(a)所示。又例如,假设待扫描源码如下:则,对该XML语言的源码进行转换后,得到的抽象语法树如图2(b)所示。步骤102,对抽象语法树中的代码信息进行解析,生成与抽象语法树对应的执行链集合,其中,执行链集合中每条执行链分别与源码中的一条执行路径对应。将待扫描源码转换为对应的抽象语法树之后,抽象语法树自身包含了待扫描源码中的所有信息,可以直接从抽象语法树上获取待扫描源码所有可能的执行路径,即执行链。从而,本实施例中,可以对获取的抽象语法树中的代码信息进行解析,得到待扫描源码中可能包含的所有执行链,进而利用所有的执行链,生成与抽象语法树对应的执行链集合。举例而言,以如图2(a)所示的抽象语法树为例,对该抽象语法树进行解析,可以得到三条执行链,分别为:①stmts_list→[false]stmt_whilecondition→stmt_return;②stamts_list→[true]stamt_while_condition→[false]stmtifcondition→else_bodyassign(=)→stmt_return;③stamts_list→[true]stamt_while_condition→[true]stmtifcondition→if_bodyassign(=)→stmt_return,则与该抽象语法树对应的执行链集合包括上述三条执行链。步骤103,对执行链集合中的每条执行链进行遍历,以确定源码中是否包含缺陷代码。本实施例中,得到抽象语法树对应的执行链集合后,可以对执行链集合中的每条执行链进行遍历,以确定源码中是否包含缺陷代码。通过遍历每条执行链即可发现缺陷代码,避免了相关技术中,首本文档来自技高网...

【技术保护点】
1.一种静态源码扫描方法,其特征在于,包括:获取待扫描源码对应的抽象语法树;对所述抽象语法树中的代码信息进行解析,生成与所述抽象语法树对应的执行链集合,其中,执行链集合中每条执行链分别与源码中的一条执行路径对应;对所述执行链集合中的每条执行链进行遍历,以确定所述源码中是否包含缺陷代码。

【技术特征摘要】
1.一种静态源码扫描方法,其特征在于,包括:获取待扫描源码对应的抽象语法树;对所述抽象语法树中的代码信息进行解析,生成与所述抽象语法树对应的执行链集合,其中,执行链集合中每条执行链分别与源码中的一条执行路径对应;对所述执行链集合中的每条执行链进行遍历,以确定所述源码中是否包含缺陷代码。2.如权利要求1所述的方法,其特征在于,所述对所述抽象语法树中的代码信息进行解析,生成与所述抽象语法树对应的执行链集合,包括:由父节点至末端子节点,依次根据每个节点对应的节点类型,生成多条子执行链,其中,每条子执行链中包括至少一个节点;根据所述多条子执行链中的节点间的关系,将所述多条子执行链进行合并处理,生成至少一条总执行链;所述对所述执行链集合中的每条执行链进行遍历,包括:对所述多条子执行链及所述至少一条总执行链分别进行遍历。3.如权利要求2所述的方法,其特征在于,所述依次根据每个节点对应的节点类型,生成多条子执行链,包括:依次判断每个节点对应的节点类型,是否为预设的节点类型;若任一节点对应的节点类型为预设的节点类型,则对所述任一节点所在的结构块中每个子节点的代码信息进行解析,以生成与所述任一节点所在的结构块对应的子执行链集合;否则,对所述任一节点所在的结构块的代码信息进行解析,以生成与所述任一节点所在的结构块对应的执行语句。4.如权利要求1所述的方法,其特征在于,所述执行链中包括各节点的节点内容和状态信息;所述对所述执行链集合中的每条执行链进行遍历,以确定所述源码中是否包含缺陷代码,包括:对每条执行链进行遍历,以确定每条执行链中各节点间的节点内容和/或状态信息是否匹配;若任一条执行链中至少一个节点的节点内容和/或状态信息未与其它节点的节点内容和/或状态信息匹配,则确定所述源码含缺陷代码。5.如权利要求4所述的方法,其特征在于,所述每条执行链中包括...

【专利技术属性】
技术研发人员:张全李彦成彭云鹏
申请(专利权)人:百度在线网络技术北京有限公司
类型:发明
国别省市:北京,11

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1