一种内嵌Lua代码静态分析方法及系统与流程
未命名
07-15
阅读:107
评论:0
一种内嵌lua代码静态分析方法及系统技术领域:
:1.本技术涉及软件开发
技术领域:
:,特别是涉及一种内嵌lua代码静态分析方法、系统、计算机设备及存储介质。
背景技术:
::2.openresty是一个基于nginx与lua的高性能web平台,其因可通过基于lua脚本语言等扩展的功能模块进行业务开发而大受欢迎。3.由于openresty能够通过嵌入简洁轻巧的lua脚本语言,使开发者可以专注于业务开发,因此,在内容分发网络(cdn)服务的开发过程中存在非常多的业务需求与场景需要lua代码实现。4.随着现代软件系统的规模越来越大,系统的复杂度也越来越高,若是对代码语法及逻辑进行静态分析即可以大大减少开发过程中的错误,提升代码开发的质量与效率。但是,目前尚不存在一个能够针对openresty可以结合业务场景对代码进行语法及逻辑分析的工具,无法做到针对openresty业务场景进行定制、分析。技术实现要素:5.基于此,有必要针对上述技术问题,提供一种内嵌lua代码静态分析方法、系统、计算机设备及存储介质,能够针对openresty环境,定制化地执行特定业务场景的lua代码逻辑分析,减少开发过程中的错误,提升代码开发的质量与效率。6.第一方面,本技术提供了一种内嵌lua代码静态分析方法,所述方法包括:7.获取源代码,所述源代码为nginx的conf文件;8.解析所述conf文件,并获取其中内嵌的lua代码;9.针对业务场景下的lua代码进行静态分析,并生成分析报告,所述静态分析包括词法及语法分析、语义分析以及逻辑分析。10.在其中一个实施例中,所述解析所述conf文件,并获取其中内嵌的lua代码,包括:11.以nginx的conf配置规则为基础,对conf文件进行分析;12.过滤掉conf文件中的原生配置项,保留内嵌的lua代码。13.在其中一个实施例中,所述词法及语法分析,包括:14.根据lua构词规则,采用有限状态机对源代码进行扫描;15.将经过词法分析的源代码按照语法规则转化为语句单元,并构建抽象语法树。16.在其中一个实施例中,所述语义分析,包括:17.对根据抽象语法树生成的控制流图和数据流图进行分析;18.检查变量的定义以及被引用的情况,所述变量通过对所述控制流图和所述数据流图进行分析得到。19.在其中一个实施例中,所述逻辑分析,包括:20.对lua代码中api的使用以及业务代码框架进行特定格式的校验;21.根据校验与评估规则,进行代码业务逻辑的校验及执行效率的评估。22.在其中一个实施例中,所述生成分析报告,之后还包括:对报告中不恰当的代码进行示警。23.第二方面,本技术提供了一种内嵌lua代码静态分析系统,所述系统包括:24.获取模块,用于获取源代码,所述源代码为nginx的conf文件;25.解析模块,用于解析所述conf文件,并获取其中内嵌的lua代码;26.分析模块,用于针对业务场景下的lua代码进行静态分析,并生成分析报告,所述静态分析包括词法及语法分析、语义分析以及逻辑分析。27.第三方面,本技术提供了一种计算机设备,包括存储器和处理器,所述存储器存储有计算机程序,所述处理器执行所述计算机程序时实现上述任一项内嵌lua代码静态分析方法。28.第四方面,本技术提供了一种计算机可读存储介质,存储有计算机程序,所述计算机程序被处理器执行时实现上述任一项内嵌lua代码静态分析方法。29.第五方面,本技术提供了一种计算机程序产品,包括计算机程序,所述计算机程序被处理器执行时实现上述任一项内嵌lua代码静态分析方法。30.上述内嵌lua代码静态分析方法、系统、计算机设备及存储介质,针对openresty业务场景下的内嵌lua代码,利用检查规则匹配与追踪lua源代码,检验内嵌lua代码结构是否符合nginx框架整体执行规则,定制化的执行特定业务场景下的lua代码逻辑分析,在不直接运行代码的情况下,通过对代码文本进行词法、语法分析、语义分析及逻辑分析,从而验证代码的规范性、安全性、可靠性及可维护性等指标,该方法能够在软件开发流程早期发现代码中的各种问题,减少开发过程中的错误,提升代码开发的质量与效率。附图说明31.图1为第一个实施例的内嵌lua代码静态分析方法流程图;32.图2为第二个实施例的内嵌lua代码静态分析方法流程图;33.图3为第三个实施例的内嵌lua代码静态分析方法流程图;34.图4为第四个实施例的内嵌lua代码静态分析方法流程图;35.图5为第五个实施例的内嵌lua代码静态分析方法流程图;36.图6为一个实施例的内嵌lua代码静态分析系统模块图;37.图7为一个实施例的执行内嵌lua代码静态分析方法优势图;38.图8为一个实施例的计算机设备的内部结构图。具体实施方式39.为使本技术实施例的目的、技术方案和优点更加清楚,下面将结合本技术实施例中的附图,对本技术实施例中的技术方案进行清楚、完整地说明,显然,所描述的实施例是本技术一部分实施例,而不是全部的实施例。基于本技术中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本技术保护的范围。40.如图1所示,在一个实施例中,一种内嵌lua代码静态分析方法,包括以下步骤:41.步骤s110,获取源代码,源代码为nginx的conf文件。42.具体的,源代码是用特定编程语言编写的人类可读文本,是程序与网站的基础。此处源代码也即是nginx的conf配置,其包含了需要对其进行静态分析的内嵌lua代码。lua是一个简洁、轻量、可扩展的程序设计语言,其体积小、启动速度快,从而适合嵌入在别的程序里,能够为应用程序提供灵活的扩展和定制功能。43.步骤s120,解析conf文件,并获取其中内嵌的lua代码。44.具体的,openresty是一个基于nginx与lua的高性能web平台,其内部集成了大量的lua库、第三方模块以及大多数的依赖项,用于方便地搭建能够处理超高并发、扩展性极高的动态web应用、web服务和动态网关。针对openresty配置文件,此处进行nginx配置项词法规则分析,把其中内嵌的lua代码进行过滤检出。在这里,其是以nginx的conf配置规则为基础,对conf文件进行分析,并生成词法分析树。需要说明的是,词法分析是将字符序列转换为单词序列的过程,进行词法分析的程序或者函数叫作词法分析器,也叫扫描器。词法分析阶段是编译过程的第一个阶段,是编译的基础。这个阶段的任务是从左到右逐个字符地读入源代码,即对构成源代码的字符流进行扫描然后根据构词规则识别单词。45.步骤s130,针对业务场景下的lua代码进行静态分析,并生成分析报告,静态分析包括词法及语法分析、语义分析以及逻辑分析。46.具体的,由于目前的程序代码量越来越大,软件程序的要求越来越严格,不同行业具有不同的标准,使开发软件时的交付压力不断增加。一般情况下,软件开发的成本很高,如果在软件发布后出现问题则造成的损失就会很大,所以为减少损失及降低成本,有必要对软件程序进行静态分析或测试。此处对lua进行针对业务场景下的lua代码静态分析操作。其包含lua源代码词法及语法分析、lua代码的语义分析,以及针对openresty业务场景的代码逻辑分析等步骤。47.上述内嵌lua代码静态分析方法,针对openresty业务场景下的内嵌lua代码,利用检查规则匹配与追踪lua源代码,检验内嵌lua代码结构是否符合nginx框架整体执行规则,定制化的执行特定业务场景下的lua代码逻辑分析,在不直接运行代码的情况下,通过对代码文本进行词法、语法分析、语义分析及逻辑分析,从而验证代码的规范性、安全性、可靠性及可维护性等指标,该方法能够在软件开发流程早期发现代码中的各种问题,减少开发过程中的错误,提升代码开发的质量与效率。48.如图2所示,在本实施例中,解析conf文件,并获取其中内嵌的lua代码,包括以下步骤:49.步骤s121,以nginx的conf配置规则为基础,对conf文件进行分析。50.具体的,针对openresty配置文件,进行nginx配置项词法规则分析,把其中内嵌的lua代码进行过滤检出。在这里,其是以nginx的conf配置规则为基础,对conf文件进行分析,并生成词法分析树。51.步骤s122,过滤掉conf文件中的原生配置项,保留内嵌的lua代码。52.具体的,nginx的conf文件中包含了nginx原生配置项以及内嵌的lua代码,此处将conf文件中的普通配置项分离,只保留lua代码用于后续静态分析。53.如图3所示,在本实施例中,词法及语法分析,包括以下步骤:54.步骤s131,根据lua构词规则,采用有限状态机对源代码进行扫描。55.具体的,词法及语法分析不仅是《静态语法检测》的基础步骤,也是编译的基础步骤。不同之处只在于是分析后编译运行,还是作进一步的分析。根据lua构词规则(即词法,也可理解为lua语言代码规则),采用有限状态机对源代码进行扫描,从而识别lua关键字,产生由词法单元构成的序列。其中,有限状态机又称有限状态自动机,简称状态机,是表示有限个状态以及在这些状态之间的转移和动作等行为的数学模型。56.需要说明的是,其可以检测源代码中不满足lua构词规则的部分,也可以对特定的缺陷进行匹配,如lua代码for循环没写end或if没写then等,还可以对找出来的缺陷进行标识删除等处理方式。57.步骤s132,将经过词法分析的源代码按照语法规则转化为语句单元,并构建抽象语法树。58.具体的,抽象语法树,或简称语法树,是源代码语法结构的一种抽象表示,它以树状的形式表现编程语言的语法结构,树上的每个节点都表示源代码中的一种结构。之所以使用抽象进行表示,是因为这里的语法并不会表示出真实语法中出现的每个细节。比如,嵌套括号被隐含在树的结构中,并没有以节点的形式呈现,而类似于if-condition-then这样的条件跳转语句,可以使用带有两个分支的节点来表示。59.如图4所示,在本实施例中,语义分析,包括以下步骤:60.步骤s133,对根据抽象语法树生成的控制流图和数据流图进行分析。61.具体的,对根据抽象语法树生成的控制流图和数据流图进行分析,可以得到代码块、控制流路径、循环、函数调用关系图等信息。62.步骤s134,检查变量的定义以及被引用的情况,变量通过对控制流图和数据流图进行分析得到。63.具体的,针对得到的代码块、控制流路径、循环、函数调用关系图等信息可以检查变量的定义、被引用的情况以及代码数据流异常等问题,如引用在前赋值在后或只赋值无引用等。64.如图5所示,在本实施例中,逻辑分析,包括以下步骤:65.步骤s135,对lua代码中api的使用以及业务代码框架进行特定格式的校验。66.具体的,对代码中的nginx变量等api的使用,进行特定格式的校验,可以发现不恰当的api调用,如api参数个数、格式校验,代码中api的输入输出等使用方式是否正常等,不恰当的变量读写等问题,如nginx$xxx变量,是否可读/可写,写入是否符合格式等等。而对业务代码框架的子模块入口函数、信息table等内容进行特定格式的校验,如框架要求某table用来传递某账户信息,那么可以校验其账户信息是否完整,特定的key是否存在,某入口函数需要传入table作为参数,table中需要包含某某某信息,那么信息是否完整/合规等,从而确保子模块符合系统框架的运行规则,确保系统的框架与模块间正常的调用,以及模块间正常的信息流动。67.步骤s136,根据校验与评估规则,进行代码业务逻辑的校验及执行效率的评估。68.具体的,可以人工的加入校验与评估规则,进行代码业务逻辑的校验或执行效率的评估等。此外,还可以对系统框架内的代码制定统一的代码风格、变量函数命名等规则,增强团队的协作效率。69.在本实施例中,生成分析报告,之后还包括:对报告中不恰当的代码进行示警。70.上述内嵌lua代码静态分析方法,创造性地针对openresty环境的内嵌lua代码进行静态检测,针对性较强,和现有技术相比,该方法不仅可以校验lua基本语法、监督特定api的使用,还可以校验内嵌lua代码与系统框架之间的信息流通,校验内嵌lua代码结构是否符合nginx框架整体执行规则,以及可以指导代码风格等。从而能够在软件开发过程中检测发现代码中的各种问题,降低开发、测试、运维的工作量,具体成本优势如图7所示,大幅提高效率,促进客户业务快速上线,提升代码质量,提高服务的稳定性。71.如图6所示,在一个实施例中,一种内嵌lua代码静态分析系统,包括获取模块610、解析模块620和分析模块630。72.获取模块610,用于获取源代码,源代码为nginx的conf文件。73.具体的,源代码是用特定编程语言编写的人类可读文本,是程序与网站的基础。此处源代码也即是nginx的conf配置,其包含了需要对其进行静态分析的内嵌lua代码。lua是一个简洁、轻量、可扩展的程序设计语言,其体积小、启动速度快,从而适合嵌入在别的程序里,能够为应用程序提供灵活的扩展和定制功能。74.解析模块620,用于解析conf文件,并获取其中内嵌的lua代码。75.具体的,openresty是一个基于nginx与lua的高性能web平台,其内部集成了大量的lua库、第三方模块以及大多数的依赖项,用于方便地搭建能够处理超高并发、扩展性极高的动态web应用、web服务和动态网关。针对openresty配置文件,此处进行nginx配置项词法规则分析,把其中内嵌的lua代码进行过滤检出。在这里,其是以nginx的conf配置规则为基础,对conf文件进行分析,并生成词法分析树。需要说明的是,词法分析是将字符序列转换为单词序列的过程,进行词法分析的程序或者函数叫作词法分析器,也叫扫描器。词法分析阶段是编译过程的第一个阶段,是编译的基础。这个阶段的任务是从左到右逐个字符地读入源代码,即对构成源代码的字符流进行扫描然后根据构词规则识别单词。76.分析模块630,用于针对业务场景下的lua代码进行静态分析,并生成分析报告,静态分析包括词法及语法分析、语义分析以及逻辑分析。77.具体的,由于目前的程序代码量越来越大,软件程序的要求越来越严格,不同行业具有不同的标准,使开发软件时的交付压力不断增加。一般情况下,软件开发的成本很高,如果在软件发布后出现问题则造成的损失就会很大,所以为减少损失及降低成本,有必要对软件程序进行静态分析或测试。此处对lua进行针对业务场景下的lua代码静态分析操作。其包含lua源代码词法及语法分析、lua代码的语义分析,以及针对openresty业务场景的代码逻辑分析等步骤。78.在本实施例中,解析模块620具体用于:以nginx的conf配置规则为基础,对conf文件进行分析;过滤掉conf文件中的原生配置项,保留内嵌的lua代码。79.具体的,针对openresty配置文件,进行nginx配置项词法规则分析,把其中内嵌的lua代码进行过滤检出。在这里,其是以nginx的conf配置规则为基础,对conf文件进行分析,并生成词法分析树。nginx的conf文件中包含了nginx原生配置项以及内嵌的lua代码,此处将conf文件中的普通配置项分离,只保留lua代码用于后续静态分析。80.在本实施例中,分析模块630具体用于:根据lua构词规则,采用有限状态机对源代码进行扫描;将经过词法分析的源代码按照语法规则转化为语句单元,并构建抽象语法树。81.具体的,词法及语法分析不仅是《静态语法检测》的基础步骤,也是编译的基础步骤。不同之处只在于是分析后编译运行,还是作进一步的分析。根据lua构词规则(即词法,也可理解为lua语言代码规则),采用有限状态机对源代码进行扫描,从而识别lua关键字,产生由词法单元构成的序列。其中,有限状态机又称有限状态自动机,简称状态机,是表示有限个状态以及在这些状态之间的转移和动作等行为的数学模型。82.需要说明的是,其可以检测源代码中不满足lua构词规则的部分,也可以对特定的缺陷进行匹配,如lua代码for循环没写end或if没写then等,还可以对找出来的缺陷进行标识删除等处理方式。83.在本实施例中,分析模块630还用于:对根据抽象语法树生成的控制流图和数据流图进行分析;检查变量的定义以及被引用的情况,变量通过对控制流图和数据流图进行分析得到。84.具体的,对根据抽象语法树生成的控制流图和数据流图进行分析,可以得到代码块、控制流路径、循环、函数调用关系图等信息。针对得到的代码块、控制流路径、循环、函数调用关系图等信息可以检查变量的定义、被引用的情况以及代码数据流异常等问题,如引用在前赋值在后或只赋值无引用等。85.在本实施例中,分析模块630还用于:对lua代码中api的使用以及业务代码框架进行特定格式的校验;根据校验与评估规则,进行代码业务逻辑的校验及执行效率的评估。86.具体的,对代码中的nginx变量等api的使用,进行特定格式的校验,可以发现不恰当的api调用,如api参数个数、格式校验,代码中api的输入输出等使用方式是否正常等,不恰当的变量读写等问题,如nginx$xxx变量,是否可读/可写,写入是否符合格式等等。而对业务代码框架的子模块入口函数、信息table等内容进行特定格式的校验,如框架要求某table用来传递某账户信息,那么可以校验其账户信息是否完整,特定的key是否存在,某入口函数需要传入table作为参数,table中需要包含某某某信息,那么信息是否完整/合规等,从而确保子模块符合系统框架的运行规则,确保系统的框架与模块间正常的调用,以及模块间正常的信息流动。可以人工的加入校验与评估规则,进行代码业务逻辑的校验或执行效率的评估等。此外,还可以对系统框架内的代码制定统一的代码风格、变量函数命名等规则,增强团队的协作效率。87.在本实施例中,内嵌lua代码静态分析系统还包括示警模块,用于对报告中不恰当的代码进行示警。88.在一个实施例中,提供了一种计算机设备,该计算机设备可以是智能终端,其内部结构图可以如图8所示。该计算机设备包括通过系统总线连接的处理器、存储器和网络接口。其中,该计算机设备的处理器用于提供计算和控制能力。该计算机设备的存储器包括非易失性存储介质、内存储器。该非易失性存储介质存储有操作系统和计算机程序。该内存储器为非易失性存储介质中的操作系统和计算机程序的运行提供环境。该计算机设备的网络接口用于与外部的终端通过网络连接通信。该计算机程序被处理器执行时以实现一种内嵌lua代码静态分析方法。89.本领域技术人员可以理解,图8中示出的结构,仅仅是与本技术方案相关的部分结构的框图,并不构成对本技术方案所应用于其上的计算机设备的限定,具体的计算机设备可以包括比图中所示更多或更少的部件,或者组合某些部件,或者具有不同的部件布置。90.在一个实施例中,一种计算机设备,包括存储器和处理器,存储器存储有计算机程序,该处理器执行计算机程序时实现上述各方法实施例中的步骤。在一个实施例中,一种计算机存储介质,存储有计算机程序,计算机程序被处理器执行时实现上述各方法实施例中的步骤。91.在一个实施例中,提供了一种计算机程序产品或计算机程序,该计算机程序产品或计算机程序包括计算机指令,该计算机指令存储在计算机可读存储介质中。计算机设备的处理器从计算机可读存储介质读取该计算机指令,处理器执行该计算机指令,使得该计算机设备执行上述各方法实施例中的步骤。92.本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储于一非易失性计算机可读取存储介质中,该计算机程序在执行时,可包括如上述各方法的实施例的流程。其中,本技术所提供的各实施例中所使用的对存储器、存储、数据库或其它介质的任何引用,均可包括非易失性和/或易失性存储器。非易失性存储器可包括只读存储器(rom)、可编程rom(prom)、电可编程rom(eprom)、电可擦除可编程rom(eeprom)或闪存。易失性存储器可包括随机存取存储器(ram)或者外部高速缓冲存储器。作为说明而非局限,ram以多种形式可得,诸如静态ram(sram)、动态ram(dram)、同步dram(sdram)、双数据率sdram(ddrsdram)、增强型sdram(esdram)、同步链路(synchlink)dram(sldram)、存储器总线(rambus)直接ram(rdram)、直接存储器总线动态ram(drdram)、以及存储器总线动态ram(rdram)等。93.以上实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。94.以上所述实施例仅表达了本技术的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对本技术专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本技术构思的前提下,还可以做出若干变形和改进,这些都属于本技术的保护范围。因此,本技术专利的保护范围应以所附权利要求为准。当前第1页12当前第1页12
技术特征:
1.一种内嵌lua代码静态分析方法,其特征在于,所述方法包括:获取源代码,所述源代码为nginx的conf文件;解析所述conf文件,并获取其中内嵌的lua代码;针对业务场景下的lua代码进行静态分析,并生成分析报告,所述静态分析包括词法及语法分析、语义分析以及逻辑分析。2.根据权利要求1所述的内嵌lua代码静态分析方法,其特征在于,所述解析所述conf文件,并获取其中内嵌的lua代码,包括:以nginx的conf配置规则为基础,对conf文件进行分析;过滤掉conf文件中的原生配置项,保留内嵌的lua代码。3.根据权利要求2所述的内嵌lua代码静态分析方法,其特征在于,所述词法及语法分析,包括:根据lua构词规则,采用有限状态机对源代码进行扫描;将经过词法分析的源代码按照语法规则转化为语句单元,并构建抽象语法树。4.根据权利要求3所述的内嵌lua代码静态分析方法,其特征在于,所述语义分析,包括:对根据抽象语法树生成的控制流图和数据流图进行分析;检查变量的定义以及被引用的情况,所述变量通过对所述控制流图和所述数据流图进行分析得到。5.根据权利要求4所述的内嵌lua代码静态分析方法,其特征在于,所述逻辑分析,包括:对lua代码中api的使用以及业务代码框架进行特定格式的校验;根据校验与评估规则,进行代码业务逻辑的校验及执行效率的评估。6.根据权利要求5所述的内嵌lua代码静态分析方法,其特征在于,所述生成分析报告,之后还包括:对报告中不恰当的代码进行示警。7.一种内嵌lua代码静态分析系统,其特征在于,所述系统包括:获取模块,用于获取源代码,所述源代码为nginx的conf文件;解析模块,用于解析所述conf文件,并获取其中内嵌的lua代码;分析模块,用于针对业务场景下的lua代码进行静态分析,并生成分析报告,所述静态分析包括词法及语法分析、语义分析以及逻辑分析。8.一种计算机设备,包括存储器和处理器,所述存储器存储有计算机程序,其特征在于,所述处理器执行所述计算机程序时实现权利要求1至6中任一项所述的方法的步骤。9.一种计算机可读存储介质,存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现权利要求1至6中任一项所述的方法的步骤。10.一种计算机程序产品,包括计算机程序,其特征在于,所述计算机程序被处理器执行时实现权利要求1至6任一项所述的方法的步骤。
技术总结
本申请涉及一种内嵌Lua代码静态分析方法、系统、计算机设备及存储介质,该方法包括以下步骤:获取源代码,源代码为Nginx的conf文件;解析conf文件,并获取其中内嵌的Lua代码;针对业务场景下的Lua代码进行静态分析,并生成分析报告,静态分析包括词法及语法分析、语义分析以及逻辑分析。该方法定制化的执行特定业务场景下的Lua代码逻辑分析,在不直接运行代码的情况下,通过对代码文本进行词法、语法分析、语义分析及逻辑分析,从而验证代码的规范性、安全性、可靠性及可维护性等指标,该方法能够在软件开发流程早期发现代码中的各种问题,减少开发过程中的错误,提升代码开发的质量与效率。量与效率。量与效率。
技术研发人员:王柄淋 叶子聪 李海兵 王文娟 王妍兰 康江彬 李小壮
受保护的技术使用者:天翼云科技有限公司
技术研发日:2023.03.13
技术公布日:2023/7/12
版权声明
本文仅代表作者观点,不代表航空之家立场。
本文系作者授权航家号发表,未经原创作者书面授权,任何单位或个人不得引用、复制、转载、摘编、链接或以其他任何方式复制发表。任何单位或个人在获得书面授权使用航空之家内容时,须注明作者及来源 “航空之家”。如非法使用航空之家的部分或全部内容的,航空之家将依法追究其法律责任。(航空之家官方QQ:2926969996)
飞行汽车 https://www.autovtol.com/
