CN113672491A - 检测sql语句合法性的方法、存储介质及终端设备 - Google Patents
检测sql语句合法性的方法、存储介质及终端设备 Download PDFInfo
- Publication number
- CN113672491A CN113672491A CN202010407861.7A CN202010407861A CN113672491A CN 113672491 A CN113672491 A CN 113672491A CN 202010407861 A CN202010407861 A CN 202010407861A CN 113672491 A CN113672491 A CN 113672491A
- Authority
- CN
- China
- Prior art keywords
- sql
- complete
- statement
- sql statement
- statements
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
- 238000000034 method Methods 0.000 title claims abstract description 68
- 238000001514 detection method Methods 0.000 claims abstract description 74
- 238000007781 pre-processing Methods 0.000 claims abstract description 9
- 230000006870 function Effects 0.000 claims description 30
- 238000005516 engineering process Methods 0.000 description 10
- 230000008569 process Effects 0.000 description 7
- 238000012360 testing method Methods 0.000 description 6
- 238000004891 communication Methods 0.000 description 4
- 230000002688 persistence Effects 0.000 description 3
- 238000013500 data storage Methods 0.000 description 2
- 238000003780 insertion Methods 0.000 description 2
- 230000037431 insertion Effects 0.000 description 2
- 230000005540 biological transmission Effects 0.000 description 1
- 230000007812 deficiency Effects 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 238000010586 diagram Methods 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 230000003993 interaction Effects 0.000 description 1
- 238000013507 mapping Methods 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 238000012545 processing Methods 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
- 230000001052 transient effect Effects 0.000 description 1
- 238000012795 verification Methods 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3604—Software analysis for verifying properties of programs
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Debugging And Monitoring (AREA)
Abstract
本发明公开了一种检测SQL语句合法性的方法、存储介质及终端设备,所述方法包括:对应用程序对应的多个SQL语句进行预处理,以获取所述应用程序对应的多个完整SQL语句;对所述多个完整SQL语句中各完整SQL语句进行解析,以得到所述完整SQL语句对应的元素集集合;调用预设的合法性规则对所述元素集集合中各元素集进行合法性规则检测;若所述元素集集合中各元素集都通过所述合法性规则检测时,判定所述元素集集合对应的所述SQL语句合法。由此,本发明通过获取应用程序的完整SQL语句,并调用预设的合法性规则对所述完整SQL语句进行合法性规则检测,从而确定当前应用程序SQL语句的合法性。
Description
技术领域
本发明涉及计算机技术领域,特别涉及一种检测SQL语句合法性的方法、计算机可读存储介质及终端设备。
背景技术
Mybatis作为一种常用的数据库持久层技术被普遍使用。在使用Mybatis技术研发的数据库应用软件中,软件的代码结构设计如下:每个模块功能关联与之对应的数据库操作程序单元(即Mapped Statement接口),包含一条或多条SQL语句(Structured QueryLanguage,结构化查询语言)的XML文件,与XML文件配对java程序接口Mapper。在一个XML文件中包含几条、十几条,甚至更多SQL语句,同时每条SQL语句因传递参数的值不同(即条件不同)最终生成的SQL语句也不尽相同。
通常情况下,检测这些SQL语句语法合法性需要进行相应的软件功能操作或软件测试。当软件包含功能很多时这无疑是一项耗时繁重的工作,同时测试功能遗漏或者动态条件SQL中不同参数内容数据覆盖不全经常出现,也就造成已上线使用的系统频繁出错。而当出现上述情况时,Mybatis技术没有SQL语句语法正确性验证的检查方法。
因而现有技术还有待改进和提高。
发明内容
本发明要解决的技术问题在于,针对现有技术的不足,提供一种检测SQL语句合法性的方法、存储介质及终端设备,以解决现有技术中Mybatis不能检测验证SQL语句合法性的问题。
本发明所采用的技术方案如下:
一种检测SQL语句合法性的方法,其中,其包括:
对应用程序对应的多个SQL语句进行预处理,以获取所述应用程序对应的多个完整SQL语句;
对所述多个完整SQL语句中各完整SQL语句进行解析,以得到所述完整SQL语句对应的元素集集合;
调用预设的合法性规则对所述元素集集合中各元素集进行合法性规则检测;
若所述元素集集合中各元素集都通过所述合法性规则检测时,判定所述元素集集合对应的所述SQL语句合法。
所述检测SQL语句合法性的方法,其中,进行所述合法性规则检测时,还包括:
若所述元素集集合中存在未通过所述合法性规则检测的元素集时,判定所述元素集集合对应的所述SQL语句不合法。
所述检测SQL语句合法性的方法,其中,所述对应用程序对应的多个SQL语句进行预处理,以获取所述应用程序对应的多个完整SQL语句具体包括:
当监听到所述应用程序启动时,通过所述应用程序对应的数据库操作程序单元得到所述多个SQL语句以及各所述SQL语句对应的SQL参数类型;
根据所述多个SQL语句以及各所述SQL语句对应的所述SQL参数类型,得到所述应用程序对应的所述多个完整SQL语句。
所述检测SQL语句合法性的方法,其中,所述根据所述多个SQL语句以及各所述SQL语句对应的所述SQL参数类型,得到所述应用程序对应的所述多个完整SQL语句具体包括:
根据所述多个SQL语句以及各所述SQL语句对应的所述SQL参数类型,创建各所述SQL语句对应的随机对象,并生成各所述随机对象对应的第一SQL语句;
获取各所述第一SQL语句包含的各属性分别对应的占位符;
各所述随机对象生成所述各属性分别对应的第一属性值;
将所述各第一SQL语句包含的各属性分别对应的占位符依次替换为所述第一属性值,以得到所述应用程序对应的所述多个完整SQL语句。
所述检测SQL语句合法性的方法,其中,所述对所述多个完整SQL语句中各完整SQL语句进行解析,以得到所述完整SQL语句对应的元素集集合具体包括:
按照预设格式对所述多个完整SQL语句中各完整SQL语句进行解析;
若所述完整SQL语句解析成功,记录所述完整SQL语句对应的元素集;
根据所述完整SQL语句对应的元素集得到所述完整SQL语句对应的元素集集合。
所述检测SQL语句合法性的方法,其中,所述预设格式具体为:
判断所述完整SQL语句是否包含多层子语句;
若所述完整SQL语句包含多层子语句,则将各所述子语句划分为子语句的头部、子语句的执行体以及子语句的条件体;
若所述完整SQL语句不包含子语句,直接将所述完整SQL语句划分为完整SQL语句的头部、完整SQL语句的执行体以及完整SQL语句的条件体。
所述检测SQL语句合法性的方法,其中,进行所述按照预设格式对所述多个完整SQL语句中各完整SQL语句进行解析的步骤之后,还包括:
若所述各完整SQL语句中存在解析失败的完整SQL语句时,判定所述应用程序对应的SQL语句不合法。
所述检测SQL语句合法性的方法,其中,所述合法性规则包括:起始关键词检测、多语句检测、元素检测、内置和自定义数据库函数正确性检测、数量配对检测、符号配对检测以及特征语法检测的至少之一。
一种计算机可读存储介质,其中,所述计算机可读存储介质存储有一个或者多个程序,所述一个或者多个程序可被一个或者多个处理器执行,以实现如上任意一项所述的检测SQL语句合法性的方法中的步骤。
一种终端设备,其中,包括:处理器和存储器;所述存储器上存储有可被所述处理器执行的计算机可读程序;所述处理器执行所述计算机可读程序时实现如上任意一项所述的检测SQL语句合法性的方法中的步骤。
有益效果:与现有技术相比,本发明提供了一种检测SQL语句合法性的方法、存储介质及终端设备,所述方法包括:对应用程序对应的多个SQL语句进行预处理,以获取所述应用程序对应的多个完整SQL语句;对所述多个完整SQL语句中各完整SQL语句进行解析,以得到所述完整SQL语句对应的元素集集合;调用预设的合法性规则对所述元素集集合中各元素集进行合法性规则检测;若所述元素集集合中各元素集都通过所述合法性规则检测时,判定所述元素集集合对应的所述SQL语句合法。由此可知,本发明通过获取应用程序的完整SQL语句,并调用预设的合法性规则对所述完整SQL语句进行合法性规则检测,从而确定当前应用程序SQL语句的合法性。
附图说明
图1为本发明提供的检测SQL语句合法性的方法的流程图。
图2为本发明提供的检测SQL语句合法性的方法中步骤S200的流程图。
图3为本发明提供的终端设备的结构原理图。
具体实施方式
本发明提供一种检测SQL语句合法性的方法、存储介质及终端设备,为使本发明的目的、技术方案及效果更加清楚、明确,以下参照附图并举实施例对本发明进一步详细说明。应当理解,此处所描述的具体实施例仅用以解释本发明,并不用于限定本发明。
本技术领域技术人员可以理解,除非特意声明,这里使用的单数形式“一”、“一个”、“所述”和“该”也可包括复数形式。应该进一步理解的是,本发明的说明书中使用的措辞“包括”是指存在所述特征、整数、步骤、操作、元件和/或组件,但是并不排除存在或添加一个或多个其他特征、整数、步骤、操作、元件、组件和/或它们的组。应该理解,当我们称元件被“连接”或“耦接”到另一元件时,它可以直接连接或耦接到其他元件,或者也可以存在中间元件。此外,这里使用的“连接”或“耦接”可以包括无线连接或无线耦接。这里使用的措辞“和/或”包括一个或更多个相关联的列出项的全部或任一单元和全部组合。
本技术领域技术人员可以理解,除非另外定义,这里使用的所有术语(包括技术术语和科学术语),具有与本发明所属领域中的普通技术人员的一般理解相同的意义。还应该理解的是,诸如通用字典中定义的那些术语,应该被理解为具有与现有技术的上下文中的意义一致的意义,并且除非像这里一样被特定定义,否则不会用理想化或过于正式的含义来解释。
下面结合附图,通过对实施例的描述,对发明内容作进一步说明。
本实施例提供了一种检测SQL语句合法性的方法,如图1所示,所述方法包括:
S100、对应用程序对应的多个SQL语句进行预处理,以获取所述应用程序对应的多个完整SQL语句。
本实施例中,针对所述多个SQL语句中的每个SQL语句,对该SQL语句进行预处理,以得到该SQL语句对应的完整SQL语句,其中,所述多个SQL语句与多个完整SQL语句一一对应。即对应用程序对应的多个SQL语句进行预处理,以获取各个SQL语句对应的完整SQL语句。
进一步,本发明使用的软件研发技术包含:Spring、SpringBoot、Mybatis,其中,Spring是软件的技术框架,并集成Mybatis实现软件对应数据库的数据保存与读取,SpringBoot是实现Spring技术的一个快捷工具,Mybatis是使用SQL语句实现软件与对应数据库的数据保存与读取的方法工具。下面对Spring、SpringBoot、Mybatis进行详细的阐述,具体如下:
Spring是一个开源的Java应用程序研发技术,包含核心模块、数据持久化、Web应用插件、轻量级IoC、AOP容器等组件模块。
SpringBoot是基于Spring技术组件包的扩展,通过对Spring技术的二次开发并增加内嵌运行容器,实现以简化配置、快速部署、独立运行java应用程序为目标。
MyBatis是一项解决数据库持久层的开源技术。它支持定制化SQL、存储过程以及高级映射,封装并简化JDBC代码创建数据库连接通道,设置数据库操作SQL语句参数,获取结果集等一系列操作。MyBatis通过使用简单的XML或注解来配置和映射原生信息,将Java代码设计接口和POJOs(Plain Ordinary Java Object,普通的Java对象)映射成数据库表结构和数据实体对象,并通过数据实体对象传递SQL参数完成软件程序数据库交互操作。
本实施例中,所述完整SQL语句为可以用于判断语句是否合法的语句,但是在应用程序启动时,无法直接获取到该完整SQL语句,也就是说,在应用程序的代码中,即XML文件的SQL语句不是完整可直接在数据库中运行的,需输入参数值才可运行,因此本实施例中,所述对应用程序对应的多个SQL语句进行预处理,以获取所述应用程序对应的多个完整SQL语句具体包括:
S101、当监听到所述应用程序启动时,通过所述应用程序对应的数据库操作程序单元得到多个SQL语句以及各所述SQL语句对应的SQL参数类型;
具体地,所述数据库操作程序单元即MappedStatement接口,所述MappedStatement接口由上述Mybatis提供,通过所述MappedStatement接口可以解析读取到当前应用程序中包含的数据库操作程序即SQL语句,以及各SQL语句对应的SQL参数类型。
S102、根据所述多个SQL语句以及各所述SQL语句对应的所述SQL参数类型,得到所述应用程序对应的所述多个完整SQL语句。
示例性的,所述根据所述多个SQL语句以及各所述SQL语句对应的所述SQL参数类型,得到所述应用程序对应的所述多个完整SQL语句具体包括:根据所述多个SQL语句以及各所述SQL语句对应的所述SQL参数类型,创建各所述SQL语句对应的随机对象,并生成各所述随机对象对应的各第一SQL语句;获取各所述第一SQL语句包含的各属性分别对应的占位符;各所述随机对象生成所述各属性分别对应的第一属性值;将所述各第一SQL语句包含的各属性分别对应的占位符依次替换为所述第一属性值,以得到所述应用程序对应的所述多个完整SQL语句。此外,创建随机对象的过程为:通过定义java随机数创建方法工具类RandomObj并调用类方法getObj(Object obj)来生成java随机对象。
S200、对所述多个完整SQL语句中各完整SQL语句进行解析,以得到所述完整SQL语句对应的元素集集合。
具体地,本发明在获取到所述多个完整SQL语句后需要对其进行解析,从而根据解析得到的数据来初步确定语句是否合法。相应的,如图2所示,图2为本发明提供的检测SQL语句合法性的方法中步骤S200的流程图,对所述多个完整SQL语句中各完整SQL语句进行解析,以得到所述完整SQL语句对应的元素集集合具体包括:
S201、按照预设格式对所述多个完整SQL语句中各完整SQL语句进行解析;
S202、若所述各完整SQL语句解析成功,记录所述各完整SQL语句对应的元素集;
S203、根据所述各完整SQL语句对应的元素集得到所述完整SQL语句对应的元素集集合。
具体地,多个完整SQL语句与多个元素集集合一一对应。所述预设格式具体为:判断完整SQL语句是否包含多层子语句;若所述完整SQL语句包含多层子语句,则将各所述子语句划分为子语句的头部、子语句的执行体以及子语句的条件体;若所述完整SQL语句不包含子语句,直接将所述完整SQL语句划分为完整SQL语句的头部、完整SQL语句的执行体以及完整SQL语句的条件体。本实施例中,每个语句所包含的三部分(头部,执行体以及条件体)所组成的集合为元素集。也就是说,每个元素集都包括一个SQL语句的头部、执行体和条件体,其中条件体可能为空,此时不需要检测条件体。例如,元素集为{【select name,password】,【from t_user】,【where name='admin'and 1=1】},则select name,password为头部,from t_user为执行体,where name='admin'and 1=1为条件体。
因此,当完整SQL语句符合上述预设格式时,则该条完整SQL语句可以正确解析,并当所述应用程序的全部完整SQL语句通过上述预设格式时,可以暂时判定所述各完整SQL语句均解析成功,并记录所述完整SQL语句对应的元素集,根据所述完整SQL语句对应的元素集得到所述完整SQL语句对应的元素集集合,从而根据该元素集集合以及接下来的步骤判断完整SQL语句是否合法;反之,当完整SQL语句不符合上述预设格式时,则该条完整SQL语句解析失败,因此本实施例中,进行所述按照预设格式对所述多个完整SQL语句中各完整SQL语句进行解析的步骤之后,还包括:
S204、若所述各完整SQL语句中存在解析失败的完整SQL语句时,判定所述应用程序对应的SQL语句不合法。
具体地,当解析失败时,则至少存在一个完整SQL语句不合法,则可以判定所述应用程序对应的SQL语句不合法。本实施例中,完整SQL语句格式种类主要包括:查询语句、删除语句、更新语句、插入语句以及存储过程访问语句;
查询语句:select列名称from表名称where条件;
删除语句:delete from表名称where列名称=值;
更新语句:update表名称set列名称=新值where列名称=某值;
插入语句:insert into表名称values(值1,值2,....),insert into表名称(列1,列2,...)values(值1,值2,....),insert into表名称values(值1,值2,....)select(列1,列2,...)from表名称等三种;
存储过程访问语句:call存储过程名称(参数值1,参数值2,...)。
其余视为非法语句。
以查询语句为例,例如查询语句为:select name,password from t_user wherename='admin'and 1=1,那么该条完整SQL语句解析后得到头部head为select name,password,执行体body为from t_user,条件体bottom为where name='admin'and 1=1。
S300、调用预设的合法性规则对所述元素集集合中各元素集进行合法性规则检测。
具体地,所述预设的合法性规则包括但不限于:起始关键词检测、多语句检测、元素检测、内置和自定义数据库函数正确性检测、数量配对检测、符号配对检测以及特征语法检测的至少之一。
所述起始关键词检测,即检测元素集包含的三部分的起始关键词是否存在,其中,所述起始关键词包括:insert、insert into、select、delete、update、value、from、where等,若完整SQL语句中所包括的每个元素集都存在上述起始关键词,即该条完整SQL语句的起始关键词检测通过;
所述多语句检测,即判断完整SQL语句是否属于包含多条或多层子语句,并且每条子语句使用配对括号包围,若每条子语句使用配对括号包围,即该条完整SQL语句的多语句检测通过,需要说明的是,如果存在多语句时需先解析子语句再逐个解析检测;
举例:SELECT JOB,AVG(SAL)FROM(
#子语句
SELECT JOB,AVG(SAL)AS AVGSAL FROM EMP GROUP BY JOB
)
TEMP WHERE TEMP.AVGSAL>2000,
如果不是配对的括号,则表示当前SQL语句不合法。
所述元素检测,即检测元素集包含的三部分中,所包含的表名称、列名称正确性、“表-字段”匹配、SQL语言关键词正确性检测,其中,表名称检测指当前SQL语句中包含的表名称是否在当前应用程序对应的数据库表中有定义,比如解析得到表名称为user,但当前数据库没有user定义,则不合法;列名称,“表-字段”检测指当前SQL中包含的列名称是否存在于当前应用程序对应的数据库表中有定义,如检测到表名emp和列名user_name,但当前数据库表emp中没有user_name定义,则不合法;SQL语言关键词是指当前关键词是否在当前应用程序对应的数据库有内置定义,比如in是关键词,如果写成inc则表示不是关键词。
此检测通过匹配预先存储的数据库信息,并根据所述数据库信息进行判断。需要说明的是,所述数据库信息主要包含:数据表名、数据表字段、数据库对象(存储过程、视图、自定义函数、内置函数)、数据库类型、SQL语言关键词等。存储结构为json文件或Redis的数据类型HashMap。其中,每个数据库表的父节点Key为表名,子节点Value为表字段(列)名。需要说明的是,上述两种存储结构均可实现<Key,value>形式存储数据,后者检索速度较快,而json文件基于物理文件存储,HashMap基于计算机内存存储。因此,本实施例中,优先采用Redis的数据类型HashMap。
示例性的,所述数据库信息中预先存储了若干表以及每个表存储了若干个字段,例如,在数据库a中存储了表,在表b中存储着字段c,本实施例中,就可以通过检测字段c在表b中是否存在,表b是否存在于数据库a中。如果字段c不在表b中,则表示当前SQL语句不合法;同理,如果检测表b不在数据库a中,那么当前SQL语句同样不合法。
所述内置和自定义数据库函数正确性检测,此检测需要匹配预先存储的数据库信息,从而可以根据所述数据库信息所包含的自定义函数以及内置函数的命名确定完整SQL语句是否命名正确,以实现内置和自定义数据库函数正确性检测。需要说明的是,所述内置数据库函数是指数据库软件带的系统函数,如AVG、Max、Count、Min等,自定义数据库函数是指研发人员根据算法需求而自定义的。例如,所述数据库信息中预存储了自定义函数getNo,在SQL解析时得到函数名为getNos,但getNos没有存在数据库信息中,则该函数对应的SQL语句不合法;同理检测是否为内置函数,不是则该内置函数对应的SQL语句不合法。
数量配对检测,即检测插入语句列数与value值个数是否相等,若插入语句列数与value值个数相等,则可以判定该完整SQL语句通过数据配对检测;反之,则认为该完整SQL语句出现错误,因此判定该完整SQL语句没有通过数据配对检测。比如插入语句为insert(id,name,emp_no)values(1,’张三’,’0013’,4),此时通过检测插入语句列数为3,但value值个数为4,因为插入语句列数与value值个数不相等,所以该SQL语句不合法。
符号配对检测,如逗号,,括号(),单引号‘’;运算符(大于>,大于等于>=,等于=,不等于<>、!=,小于<,小于等于<=、and和or结合等)检测;也就是说,对每条完整SQL语句的符号进行配对检测,比如括号(),一定是一对;一个完整SQL语句中只存在一个单括号,那么即可判定该SQL语句没有通过符号配对检测;引号“”同理可得。可以理解,对于SQL语句中的所有符号进行检测,从而可以确定完整SQL语句的符号是否合法。
本实施例中,还可以包括特征语法检测,例如,所述特征语法包括like、in、notin、top、limit、between、and等,以between为例,若检测到完整SQL语句中存在“betwee”或是“betwen”等错误的特征语法词时,既可以判定该SQL语句没有通过特征语句检测,证明该完整SQL语句不合法。可以理解,特征语法指SQL语句格式有固定要求,如like格式为like‘%匹配值%’,in格式为in(‘值1’,‘值2’,‘值3’)等。
S400、若所述元素集集合中各元素集都通过所述合法性规则检测时,判定所述元素集集合对应的所述SQL语句合法。
具体地,若所述元素集集合中各元素集都通过预设的合法性规则时,则判定所述元素集集合对应的SQL语句合法。也就是说,通过判定元素集集合对应的完整SQL语句合法,则完整SQL语句对应的SQL语句合法,进一步的,当各个SQL语句通过上述方法均判定合法时,从而可以确定应用程序对应的多个SQL语句均合法,即通过判定多个完整SQL语句均合法时,则应用程序对应的多个SQL语句合法。
也就是说,对于上述的合法性规则,只要存在上述任意一项检测(起始关键词检测,多语句检测,元素检测,内置和自定义数据库函数正确性检测,数量配对检测以及符号配对检测等)没有通过时,那么就可以确定该元素集合所对应的完整SQL语句不合法,相应的,进行所述合法性规则检测时,还包括:
S500、若所述元素集集合中存在未通过所述合法性规则检测的元素集时,判定所述元素集集合对应的所述SQL语句不合法。
具体地,若所述元素集集合中存在未通过所述合法性规则的元素集时,即可以确定该元素集对应的完整SQL语句不合法,并记录该条完整SQL语句的失败日志,通过所述失败日志可以方便用户查看SQL语句格式错误以及失败的原因,记录日志目的作为检测过程结果,提供修正SQL语句的参考记录。可见,本发明能快速定位应用程序SQL语法合法性问题,降低功能测试难度,提升系统功能测试覆盖范围,缩短测试周期,为软件测试质量提供更有力保障。
进一步,本实施例的一个实现方式中,上述检测过程可分为两种方法模式进行开展,即全量检测和唯一检测,全量检测是针对每个功能的每个SQL语句最多可能值情况创建随机参数对象值,用于遍历当前数据库操作单元可能产生的所有完整SQL语句字符串形态并逐一检测,待检测完成显示每个语句块检测结果或错误信息,此方法检测软件功能覆盖面完整,通常用于软件功能自动化测试;唯一检测是指使用参数对象全值(参数对象的每个属性均赋值)和空对象参数值(参数对象每个属性均赋值null),以此构建软件各功能包含的每一个完整SQL语句,此过程中只要出现任意一条SQL语句检测错误就立即终止当前检测执行,并终止软件运行,检测过程快速,通常用于软件发布验证、软件启动等。
基于上述检测SQL语句合法性的方法,本发明还提供了一种计算机可读存储介质,所述计算机可读存储介质存储有一个或者多个程序,所述一个或者多个程序可被一个或者多个处理器执行,以实现上述实施例所述的检测SQL语句合法性的方法中的步骤。
基于上述检测SQL语句合法性的方法,本发明还提供了一种终端设备,如图3所示,其包括至少一个处理器(processor)20;显示屏21;以及存储器(memory)22,还可以包括通信接口(Communications Interface)23和总线24。其中,处理器20、显示屏21、存储器22和通信接口23可以通过总线24完成相互间的通信。显示屏21设置为显示初始设置模式中预设的用户引导界面。通信接口23可以传输信息。处理器20可以调用存储器22中的逻辑指令,以执行上述实施例中的方法。
此外,上述的存储器22中的逻辑指令可以通过软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。
存储器22作为一种计算机可读存储介质,可设置为存储软件程序、计算机可执行程序,如本公开实施例中的方法对应的程序指令或模块。处理器30通过运行存储在存储器22中的软件程序、指令或模块,从而执行功能应用以及数据处理,即实现上述实施例中的方法。
存储器22可包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序;存储数据区可存储根据终端设备的使用所创建的数据等。此外,存储器22可以包括高速随机存取存储器,还可以包括非易失性存储器。例如,U盘、移动硬盘、只读存储器(Read-Only Memory,ROM)、随机存取存储器(Random Access Memory,RAM)、磁碟或者光盘等多种可以存储程序代码的介质,也可以是暂态存储介质。
此外,上述存储介质以及终端设备中的多条指令处理器加载并执行的具体过程在上述方法中已经详细说明,在这里就不再一一陈述。
综上综上所述,与现有技术相比,本发明实施例具有以下优点:
本发明公开了一种检测SQL语句合法性的方法、存储介质及终端设备,所述方法包括:对应用程序对应的多个SQL语句进行预处理,以获取所述应用程序对应的多个完整SQL语句;对所述多个完整SQL语句中各完整SQL语句进行解析,以得到所述完整SQL语句对应的元素集集合;调用预设的合法性规则对所述元素集集合中各元素集进行合法性规则检测;若所述元素集集合中各元素集都通过所述合法性规则检测时,判定所述元素集集合对应的所述SQL语句合法。由此可知,本发明通过获取应用程序的完整SQL语句,并调用预设的合法性规则对所述完整SQL语句进行合法性规则检测,从而确定当前应用程序SQL语句的合法性。
最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。
Claims (10)
1.一种检测SQL语句合法性的方法,其特征在于,其包括:
对应用程序对应的多个SQL语句进行预处理,以获取所述应用程序对应的多个完整SQL语句;
对所述多个完整SQL语句中各完整SQL语句进行解析,以得到所述完整SQL语句对应的元素集集合;
调用预设的合法性规则对所述元素集集合中各元素集进行合法性规则检测;
若所述元素集集合中各元素集都通过所述合法性规则检测时,判定所述元素集集合对应的所述SQL语句合法。
2.根据权利要求1所述检测SQL语句合法性的方法,其特征在于,进行所述合法性规则检测时,还包括:
若所述元素集集合中存在未通过所述合法性规则检测的元素集时,判定所述元素集集合对应的所述SQL语句不合法。
3.根据权利要求1所述检测SQL语句合法性的方法,其特征在于,所述对应用程序对应的多个SQL语句进行预处理,以获取所述应用程序对应的多个完整SQL语句具体包括:
当监听到所述应用程序启动时,通过所述应用程序对应的数据库操作程序单元得到所述多个SQL语句以及各所述SQL语句对应的SQL参数类型;
根据所述多个SQL语句以及各所述SQL语句对应的所述SQL参数类型,得到所述应用程序对应的所述多个完整SQL语句。
4.根据权利要求3所述检测SQL语句合法性的方法,其特征在于,所述根据所述多个SQL语句以及各所述SQL语句对应的所述SQL参数类型,得到所述应用程序对应的所述多个完整SQL语句具体包括:
根据所述多个SQL语句以及各所述SQL语句对应的所述SQL参数类型,创建各所述SQL语句对应的随机对象,并生成各所述随机对象对应的第一SQL语句;
获取各所述第一SQL语句包含的各属性分别对应的占位符;
各所述随机对象生成所述各属性分别对应的第一属性值;
将所述各第一SQL语句包含的各属性分别对应的占位符依次替换为所述第一属性值,以得到所述应用程序对应的所述多个完整SQL语句。
5.根据权利要求1所述检测SQL语句合法性的方法,其特征在于,所述对所述多个完整SQL语句中各完整SQL语句进行解析,以得到所述完整SQL语句对应的元素集集合具体包括:
按照预设格式对所述多个完整SQL语句中各完整SQL语句进行解析;
若所述完整SQL语句解析成功,记录所述完整SQL语句对应的元素集;
根据所述完整SQL语句对应的元素集得到所述完整SQL语句对应的元素集集合。
6.根据权利要求5所述检测SQL语句合法性的方法,其特征在于,所述预设格式具体为:
判断所述完整SQL语句是否包含多层子语句;
若所述完整SQL语句包含多层子语句,则将各所述子语句划分为子语句的头部、子语句的执行体以及子语句的条件体;
若所述完整SQL语句不包含子语句,直接将所述完整SQL语句划分为完整SQL语句的头部、完整SQL语句的执行体以及完整SQL语句的条件体。
7.根据权利要求5所述检测SQL语句合法性的方法,其特征在于,进行所述按照预设格式对所述多个完整SQL语句中各完整SQL语句进行解析的步骤之后,还包括:
若所述各完整SQL语句中存在解析失败的完整SQL语句时,判定所述应用程序对应的SQL语句不合法。
8.根据权利要求1所述检测SQL语句合法性的方法,其特征在于,所述合法性规则包括:起始关键词检测、多语句检测、元素检测、内置和自定义数据库函数正确性检测、数量配对检测、符号配对检测以及特征语法检测的至少之一。
9.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质存储有一个或者多个程序,所述一个或者多个程序可被一个或者多个处理器执行,以实现如权利要求1~8任意一项所述的检测SQL语句合法性的方法中的步骤。
10.一种终端设备,其特征在于,包括:处理器和存储器;所述存储器上存储有可被所述处理器执行的计算机可读程序;所述处理器执行所述计算机可读程序时实现如权利要求1~8任意一项所述的检测SQL语句合法性的方法中的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010407861.7A CN113672491A (zh) | 2020-05-14 | 2020-05-14 | 检测sql语句合法性的方法、存储介质及终端设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010407861.7A CN113672491A (zh) | 2020-05-14 | 2020-05-14 | 检测sql语句合法性的方法、存储介质及终端设备 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN113672491A true CN113672491A (zh) | 2021-11-19 |
Family
ID=78537399
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010407861.7A Pending CN113672491A (zh) | 2020-05-14 | 2020-05-14 | 检测sql语句合法性的方法、存储介质及终端设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN113672491A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114356896A (zh) * | 2022-03-18 | 2022-04-15 | 中信建投证券股份有限公司 | 一种数据库检测方法及装置 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20080320013A1 (en) * | 2007-06-22 | 2008-12-25 | International Business Machines Corporation | Statement generation using statement patterns |
CN107292170A (zh) * | 2016-04-05 | 2017-10-24 | 阿里巴巴集团控股有限公司 | Sql注入攻击的检测方法及装置、系统 |
CN109284282A (zh) * | 2018-10-22 | 2019-01-29 | 北京极数云舟科技有限公司 | 一种基于MySQL数据库运维方法和系统 |
CN110795101A (zh) * | 2019-09-18 | 2020-02-14 | 平安科技(深圳)有限公司 | Sql代码信息显示方法、装置、计算机装置及存储介质 |
-
2020
- 2020-05-14 CN CN202010407861.7A patent/CN113672491A/zh active Pending
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20080320013A1 (en) * | 2007-06-22 | 2008-12-25 | International Business Machines Corporation | Statement generation using statement patterns |
CN107292170A (zh) * | 2016-04-05 | 2017-10-24 | 阿里巴巴集团控股有限公司 | Sql注入攻击的检测方法及装置、系统 |
CN109284282A (zh) * | 2018-10-22 | 2019-01-29 | 北京极数云舟科技有限公司 | 一种基于MySQL数据库运维方法和系统 |
CN110795101A (zh) * | 2019-09-18 | 2020-02-14 | 平安科技(深圳)有限公司 | Sql代码信息显示方法、装置、计算机装置及存储介质 |
Non-Patent Citations (2)
Title |
---|
CHINIEXI0949: "Mybatis sql 如何进行全自动补全 检测sql的正确性", pages 1 - 2, Retrieved from the Internet <URL:https://blog.csdn.net/chiniexi0949/article/details/100797534> * |
潘秋红: "Android应用中SQL注入漏洞静态检测方法*", 《计算机科学与探索2018, 》, pages 1 - 13 * |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114356896A (zh) * | 2022-03-18 | 2022-04-15 | 中信建投证券股份有限公司 | 一种数据库检测方法及装置 |
CN114356896B (zh) * | 2022-03-18 | 2022-07-01 | 中信建投证券股份有限公司 | 一种数据库检测方法及装置 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
AU2010319344B2 (en) | Managing record format information | |
US9489418B2 (en) | Processing database queries embedded in application source code from within integrated development environment tool | |
US8392880B2 (en) | Rapid application development for database-aware applications | |
US9047337B2 (en) | Database connectivity and database model integration within integrated development environment tool | |
US8566793B2 (en) | Detecting and displaying errors in database statements within integrated development environment tool | |
US8516442B2 (en) | Graphical user interface metadata evolution tool | |
US20150242191A1 (en) | Method for validating equivalent data structures | |
US6694290B1 (en) | Analyzing an extended finite state machine system model | |
CN111159016A (zh) | 一种规范检测方法及装置 | |
US6853963B1 (en) | Analyzing an extended finite state machine system model | |
CN113672491A (zh) | 检测sql语句合法性的方法、存储介质及终端设备 | |
CN112650526B (zh) | 版本一致性的检测方法、装置、电子设备和介质 | |
US8819645B2 (en) | Application analysis device | |
US11176022B2 (en) | Health diagnostics and analytics for object repositories | |
CN112068842A (zh) | 依赖关系的建立方法、联动编译方法及其系统 | |
CN112486990A (zh) | 一种根据模型描述同步数据库表结构的方法及设备 | |
CN116362230A (zh) | 参数校验方法、装置、计算机设备可存储介质 | |
Gallen | The importance of data validation and parsing when working with external data sources | |
CN117472958A (zh) | Sql语句执行结果的验证方法、装置、设备及介质 | |
CN114816453A (zh) | 一种was数据源的配置方法及装置 | |
JP2009075681A (ja) | イベント駆動型ソフトウェア用仕様記述支援装置 | |
CN116107550A (zh) | 一种操作代码的生成方法及装置 | |
CN116861887A (zh) | 一种后端接口数据校验方法及系统 | |
CN116954617A (zh) | 一种基于Cppcheck和Gerrit的代码静态检测方法和服务器 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |