CN114443685A - 一种sql注入检测方法及装置 - Google Patents
一种sql注入检测方法及装置 Download PDFInfo
- Publication number
- CN114443685A CN114443685A CN202111580861.8A CN202111580861A CN114443685A CN 114443685 A CN114443685 A CN 114443685A CN 202111580861 A CN202111580861 A CN 202111580861A CN 114443685 A CN114443685 A CN 114443685A
- Authority
- CN
- China
- Prior art keywords
- sql
- syntax tree
- parameter
- template
- variables
- 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
- 238000002347 injection Methods 0.000 title claims abstract description 80
- 239000007924 injection Substances 0.000 title claims abstract description 80
- 238000001514 detection method Methods 0.000 title claims abstract description 50
- 238000000034 method Methods 0.000 claims abstract description 25
- 238000012545 processing Methods 0.000 claims description 21
- 238000004590 computer program Methods 0.000 claims description 16
- 239000000243 solution Substances 0.000 description 9
- 238000004891 communication Methods 0.000 description 6
- 230000014509 gene expression Effects 0.000 description 5
- 238000010586 diagram Methods 0.000 description 4
- 230000006870 function Effects 0.000 description 4
- 230000000694 effects Effects 0.000 description 3
- 238000009795 derivation Methods 0.000 description 2
- 238000002372 labelling Methods 0.000 description 2
- 230000003287 optical effect Effects 0.000 description 2
- 230000008569 process Effects 0.000 description 2
- 238000012360 testing method Methods 0.000 description 2
- 238000012546 transfer Methods 0.000 description 2
- 230000009286 beneficial effect Effects 0.000 description 1
- 230000008859 change Effects 0.000 description 1
- 230000006835 compression Effects 0.000 description 1
- 238000007906 compression Methods 0.000 description 1
- 238000010276 construction Methods 0.000 description 1
- 239000000284 extract Substances 0.000 description 1
- 238000010801 machine learning Methods 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
- 230000009466 transformation Effects 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/242—Query formulation
- G06F16/2433—Query languages
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/22—Indexing; Data structures therefor; Storage structures
- G06F16/2228—Indexing structures
- G06F16/2246—Trees, e.g. B+trees
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Mathematical Physics (AREA)
- Computational Linguistics (AREA)
- Software Systems (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明实施例提供一种SQL注入检测方法及装置。其中,该方法包括:接收用户请求,用户请求包括至少一个参数,对于至少一个参数中的每个参数,通过预设的至少一个SQL模板,构建对应至少一个SQL模板的至少一个SQL语句;根据至少一个SQL语句生成至少一个语法树;将至少一个SQL模板对应的至少一个标准语法树与至少一个语法树对比,根据对比结果判断用户请求是否为SQL注入。减少了SQL注入的漏报,提高了检测准确率,增强了对未知SQL注入方式的检测能力。
Description
技术领域
本发明涉及信息安全领域,尤其涉及一种SQL注入检测方法及装置。
背景技术
SQL注入是一种常用的且易于实施的web攻击手段,它通过将SQL代码添加到输入参数中,再传递到服务器解析并执行的一种攻击手法。目前对SQL注入的检测手法主要分为三种,基于规则、基于机器学习、基于语法分析。
当前语法分析SQL注入检测,通常使用的方法是基于语法分析SQL注入检测方法。通常基于语法分析SQL注入检测方案通过识别用户表单输入的单词,判断单词是否是关键字、变量、变量名,形成词素表,通过语法规则分析,提炼出词素结构串。通过提取的词素结构串和标准结构串进行比较来判断是否是SQL注入。这样可以解决很多绕过问题,减少漏报。
但是提取词素结构串和标准结构串本质还是一种基于语法特征的匹配,如果特征不够全面就会出现漏报,而且不能应对新出现的注入方式,因此,现有方法对漏报和对未知SQL注入方式的检测能力比较弱。
发明内容
针对现有技术中的问题,本发明实施例提供一种SQL注入检测方法及装置。
具体地,本发明实施例提供了以下技术方案:
第一方面,本发明实施例提供了一种SQL注入检测方法,包括:接收收用户请求,所述用户请求包括至少一个参数,对于所述至少一个参数中的每个参数,通过预设的至少一个SQL模板,构建对应所述至少一个SQL模板的至少一个SQL语句;根据所述至少一个SQL语句生成至少一个语法树;将所述至少一个SQL模板对应的至少一个标准语法树与所述至少一个语法树对比,根据对比结果判断所述用户请求是否为SQL注入。
进一步地,所述接收用户请求,所述接收用户请求,所述用户请求包括至少一个参数,对于所述至少一个参数中的每个参数,通过预设的至少一个SQL模板,构建对应所述至少一个SQL模板的至少一个SQL语句,包括:接收用户请求,将所述用户请求切割,得到所述至少一个参数,所述参数由key值和value值组成;对于所述至少一个参数中的每个参数,根据所述参数的key值和value值,通过预设的至少一个SQL模板,构建对应所述至少一个SQL模板的至少一个SQL语句。
进一步地,所述用户请求包括http请求。
进一步地,所述根据所述至少一个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注入检测方法的另一些实施例流程图;
图3为本发明一种SQL注入检测方法的再一些实施例流程图;
图4为本发明一种SQL注入检测方法的一个应用场景的流程示意图;
图5为本发明检测装置实施例结构示意图;
图6为本发明电子设备实体实施例结构示意图。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
图1为本发明一种SQL注入检测方法实施例流程图。如图1所示,本发明实施例的方法包括:
S101,接收用户请求,用户请求包括至少一个参数,对于至少一个参数中的每个参数,通过预设的至少一个SQL模板,构建对应至少一个SQL模板的至少一个SQL语句。
作为示例,对于WEB服务器而言,接收的用户请求是http请求。http请求例如:
https://www.***.com/search?q=1234&newwindow=1&sxsrf=
AOaemvKI01msZJYcR3g-9eM996O7nqkdJg:1639632387722&ei=A866YevEK5Ta9APUm4u4Bg&
start=50&sa=N&ved=2ahUKEwir0qDQyuf0AhUULX0KHdTNAmc4KBDw0wN6BAgBEE8&biw=
2133&bih=1118&dpr=0.9
其中,参数部分为:
q=1234&newwindow=1&sxsrf=AOaemvKI01msZJYcR3g-9eM996O7nqkdJg:1639632387722&ei=A866YevEK5Ta9APUm4u4Bg&start=50&sa=N&ved=2ahUKEwir0qDQyuf0AhUULX0KHdTNAmc4KBDw0wN6BAgBEE8&biw=2133&bih=1118&dpr=0.9,每个参数用“&”分隔。
作为示例,可以通过http解析工具完成用户请求的参数解析和获取。
对于至少一个参数中的每个参数,通过预设的至少一个SQL模板,构建对应至少一个SQL模板的至少一个SQL语句。仍以上述参数部分为例,第一个参数为“q=1234”,至少一个SQL模板中的一个SQL模板可以是“select 123from 234where id=$1”,其中,“$1”为SQL模板中需要被参数替换的部分。将参数“q=1234”代入SQL模板“select 123from 234whereid=$1”中,可得到构建的SQL语句,即“select 123from 234where id=1234”。以此类推,将第一个参数“q=1234”分别代入至少一个SQL模板中的每个模板,得到对应第一个参数的至少一个SQL语句。然后,将第二个参数“newwindow=1”也分别代入至少一个SQL模板中的每个模板,得到对于应第二个参数的至少一个SQL语句。至少一个参数中的每个参数都可以代入至少一个SQL模板,得到对应的至少一个SQL模板。
在一些实施例中,构建对应至少一个SQL模板的至少一个SQL语句之后,还可以判断构建的语句是否合法,即判断构建的SQL语句是否符合SQL语言的规范。
S102,根据至少一个SQL语句生成至少一个语法树。
语法树(或称抽象语法树,abstract syntax tree或者缩写为AST,或称语法树syntax tree),是句子(句子可以是文本或函数,例如上述示例的SQL语句)结构的图形表示,语法树代表了句子的推导结果,有利于理解句子语法结构的层次,即语法树就是按照某一规则进行推导时所形成的树,是源代码的抽象语法结构的树状表现形式。语法树可以用在代码压缩、混淆、编译等应用场景中。
作为示例,可以通过现有的函数库生成语法树,例如C++语言可以通过执行“clang-cc1 test.c-ast-dump”,获取“test.c”中数据的语法树。
仍以上述为例,得到对应第一个参数的至少一个SQL语句后,根据至少一个SQL语句生成语法树。生成的语法树可以是:
“[′select′,[′123′],[′234′],[′where′,[′id′,′=′,′1234′]]]”。
S103,将至少一个SQL模板对应的至少一个标准语法树与至少一个语法树对比,根据对比结果判断用户请求是否为SQL注入。
仍以上述SQL模板为“select 123from 234where id=$1”为例,SQL模板“select123from 234where id=$1”对应的标准语法树可以是“[′select′,[′123′],[′234'],[′where',['id','=','$1']]]”。
作为示例,将第一参数根据至少一个模板生成的至少一个SQL语句对应的至少一个语法树,分别与对应的至少一个模板的标准语法树进行结构对比,若对比成功,说明对应第一参数的至少一个SQL语句与至少一个标准语法树相似,第一参数不是SQL注入。然后将第二参数根据至少一个模板生成的至少一个SQL语句对应的至少一个语法树,分别与对应的至少一个模板的标准语法树进行结构对比,若对比失败,则判断第二参数对应的用户请求为SQL注入,并结束循环;若对比成功,则以此类推将根据第三参数生成的语法树与标准语法树对比,直到将用户请求中的所有参数轮询完毕。
在一些实施例中,在检测出用户请求为SQL注入时,可以将用户请求输入分析引擎进行分析和回溯,并产生告警。作为示例,分析引擎的输出可以是布尔值,即用0或1表示用户请求是否包含SQL注入。
本发明实施例提供的SQL注入检测方法,通过接收用户请求,用户请求包括至少一个参数,对于至少一个参数中的每个参数,通过预设的至少一个SQL模板,构建对应至少一个SQL模板的至少一个SQL语句;根据至少一个SQL语句生成至少一个语法树;将至少一个SQL模板对应的至少一个标准语法树与至少一个语法树对比,根据对比结果判断用户请求是否为SQL注入。根据构造的SQL语句生成语法树,实现了结合上下文分析对SQL注入的检测。通过将至少一个标准语法树与至少一个语法树的结构对比检测SQL注入,减少了SQL注入的漏报,提高了检测准确率,增强了对未知SQL注入方式的检测能力。
图2为本发明一种SQL注入检测方法的另一些实施例流程图。如图2所示,本发明实施例的方法包括:
S201,接收用户请求,将用户请求切割,得到至少一个参数,参数由key值和value值组成。
在一些实施例中,在接收到用户请求前,可以通过预设的关键字过滤用户请求,当用户请求中存在关键字,则将用户请求切割,得到至少一个参数。关键字为现有语言的保留字,现有语言比如mysql、mssql、orcale等。
仍以上述参数部分为例:
q=1234&newwindow=1&sxsrf=AOaemvKI01msZJYcR3g-9eM996O7nqkdJg:1639632387722&ei=A866YevEK5Ta9APUm4u4Bg&start=50&sa=N&ved=2ahUKEwir0qDQyuf0AhUULX0KHdTNAmc4KBDw0wN6BAgBEE8&biw=2133&bih=1118&dpr=0.9
其中,第一参数“q=1234”的key值为“q”,value值为“1234”,第二参数的key值为“newwindow”,value值为“1”。
作为示例,用户请求为http请求:
https://www.***.com/search?q=1234&newwindow=1&sxsrf=
AOaemvKI01msZJYcR3g-9eM996O7nqkdJg:1639632387722&ei=A866YevEK5Ta9APUm4u4Bg&
start=50&sa=N&ved=2ahUKEwir0qDQyuf0AhUULX0KHdTNAmc4KBDw0wN6BAgBEE8&biw=
2133&bih=1118&dpr=0.9
可以根据http请求的规范切割得到至少一个参数的key值和value值。http请求的“?”后面为参数部分,每个参数之间以符合“&”隔开,每个参数的“=”前面时key值,“=”后面是value值。
在一些可选的实现方式中,用户请求包括http请求。
HTTP是超文本传输协议,其定义了客户端与服务器端之间文本传输的规范。HTTP默认使用80端口,这个端口指的是服务端的端口,而客户端使用的端口是动态分配的。当没有指定端口访问时,客户端的浏览器会默认80端口。也可以指定访问端口,例如:http://www.ip138.com:80。
HTTP协议中共定义了八种方法,来表明Request-URL指定的资源不同的操作方式。
HTTP请求的方法包括:
(1)HTTP1.0定义了三种请求方法:GET,POST和HEAD方法。
(2)HTTP1.1新增了五种请求方法:OPTIONS,PUT,DELETE,TRACE和CONNECT方法。
用户请求可以是HTTP协议定义的八种方法中的任意一种。用户请求也可以是通过其他协议提交的请求。
S202,对于至少一个参数中的每个参数,根据参数的key值和value值,通过预设的至少一个SQL模板,构建对应至少一个SQL模板的至少一个SQL语句。
仍以上述第一参数“q=1234”的key值为“q”,value值为“1234”为例,SQL模板可以是“select 123from 234where id=$1”,将第一参数的key值和value值分别代入SQL模板得到“select 123from 234where id=1234”和“select 123from 234where id=q”,两个重构的SQL语句。
S203,根据至少一个SQL语句生成至少一个语法树。
在一些实施例中,步骤203的具体实现及其所带来的技术效果,可以参考图1对应的实施例中的步骤102,在此不再赘述。
S204,将至少一个SQL模板对应的至少一个标准语法树与至少一个语法树对比,根据对比结果判断用户请求是否为SQL注入。
在一些实施例中,步骤204的具体实现及其所带来的技术效果,可以参考图1对应的实施例中的步骤103,在此不再赘述。
本发明实施例提供的SQL注入检测方法,与图1的实施例相比,图2提供的SQL注入检测方法突出了如何利用用户请求中的至少一个参数构建至少一个SQL语句。根据用户请求的特点,用户请求中的至少一个参数分解出来,并进一步得到每个参数的key值和value值。通过key值和value值构建对应至少一个SQL模板的至少一个SQL语句,将用户请求的参数的格式统一,构建对应至少一个SQL模板的至少一个SQL语句,可以提高构建SQL语句的效率。
图3为本发明一种SQL注入检测方法的再一些实施例流程图。如图3所示,本发明实施例的方法包括:
S301,接收用户请求,用户请求包括至少一个参数,对于至少一个参数中的每个参数,通过预设的至少一个SQL模板,构建对应至少一个SQL模板的至少一个SQL语句。
在一些实施例中,步骤301的具体实现及其所带来的技术效果,可以参考图1对应的实施例中的步骤101,在此不再赘述
S302,通过词法分析引擎,标记至少一个SQL语句中的关键字和变量。
词法分析是计算机科学中将字符序列转换为单词(Token)序列的过程。进行词法分析的程序或者函数叫作词法分析器(Lexical analyzer,简称Lexer),也叫扫描器(Scanner)、词法分析引擎。
关键字和变量可以是预先设定好的。关键字表示某个语言中具有特定功能的单词或句子。比如常用的关键字可以是if、else和while等。变量表示关键字后面的单词或句子。。
作为示例,SQL语句可以是“select 123from 234where id=$1”,其中“select”、“from”、“where”和“id”可以是关键字。“123”、“234”、“=”和“$1”可以是变量。
作为示例,SQL语句可以是“const a=5”,经过词法分析引擎后,可以得到:
[{value:′const′,type:′keyword′},{value:′a′,type:′identifier′},...]
其中,“const”是关键字,“a”、“=”和“5”是变量。
S303,通过语法解析引擎,根据至少一个SQL语句中标记的关键字和变量生成至少一个语法树。
语法分析是指编译过程的一个逻辑阶段。语法分析的任务是在词法分析的基础上将单词序列组合成各类语法短语,如“程序”,“语句”,“表达式”等等。语法分析程序(例如语法解析引擎)判断源程序在结构上是否正确,其中,源程序的结构由上下文无关文法描述。上下文无关文法是形式语言理论中一种重要的变换文法,用来描述上下文无关语言,在乔姆斯基分层中称为2型文法。程序设计语言的语法基本上都是上下文无关文法。同正则表达式类似,上下文无关文法的规则是定义在一个字母表或符号集之上。在正则表达式中,这些符号通常就是字符,而在上下文无关文法的规则中,符号通常是表示字符串的记号。例如C语言中的枚举类型定义了在扫描程序中的记号;为了避免涉及到特定实现语言(例如C语言)中表示记号的细节,就使用了正则表达式本身来表示记号。此时的记号就是一个固定的符号,如同在保留字“while”中或诸如“+”或“:”、“=”这样的特殊符号一样,对于作为表示多于一个串的标识符和数的记号来说,代码字体为斜体,这就同假设这个记号是正则表达式的名字一样。
作为示例,SQL语句可以是“select 123from 234where id=$1”,根据词法分析引擎标记的关键字和变量,生成对应的语法树为:
“[′select',['123'],['234'],[′where′,[′id′,′=′,'$1']]]”。
作为示例,SQL语句可以是“const a=5”,根据其经过词法分析引擎得到的关键字和变量,生成对应的语法树为:
S304,将至少一个SQL模板对应的至少一个标准语法树与至少一个语法树对比,根据对比结果判断用户请求是否为SQL注入。
在一些可选的实现方式中,将至少一个SQL模板对应的至少一个标准语法树与至少一个语法树对比,包括:将至少一个SQL模板对应的至少一个标准语法树中的关键字和变量与至少一个语法树的关键字和变量对比。
在一些实施例中,标准语法树与语法树的对比就是语法树之间的结构对比。语法树的结构体现在关键字和变量上。因此,语法树之间的结构对比可以实例为语法树之间的关键字和变量的对比。
在一些可选的实现方式中,将至少一个SQL模板对应的至少一个标准语法树中的关键字和变量与至少一个语法树的关键字和变量对比,包括:将至少一个SQL模板对应的至少一个标准语法树中的关键字的位置和变量的位置与至少一个语法树的关键字的位置和变量的位置对比。
语法树是由关键字和变量构成的树,因此节点的位置是可知的,每个节点可以是关键字,也可以是变量。作为示例,语法树对比时,可以仅比较关键字的位置或者仅比较变量的位置。
在一些可选的实现方式中,将至少一个SQL模板对应的至少一个标准语法树中的关键字和变量与至少一个语法树的关键字和变量对比,包括:将至少一个SQL模板对应的至少一个标准语法树中的关键字的数量和变量的数量与至少一个语法树的关键字的数量和变量的数量对比。
作为示例,在语法树对比之前,需要通过遍历至少一个SQL语句的关键词和变量的位置和数量,并进行标记。
作为示例,语法树对比时,可以仅比较关键字的数量或者仅比较变量的数量。或者语法树对比时,将两颗语法树的关键字的数量和位置比较,且将两颗语法树的变量的数量和位置比较。
本发明实施例提供的SQL注入检测方法,与图1和图2的实施例相比,图3提供的SQL注入检测方法突出了如何根据至少一个SQL语句生成至少一个语法树。通过词法分析引擎,标记至少一个SQL语句中的关键字和变量;通过语法解析引擎,根据至少一个SQL语句中标记的关键字和变量生成至少一个语法树。SQL语句分别通过词法分析引擎和语法解析引擎生成的语法树,结合了SQL语句的上下文特点,有利于更加准确的描述SQL语句,进而有利于通过分析对比SQL语句,从而更加准确的判断用户请求是否为SQL注入。
如图4所示的一种SQL注入检测方法的一个应用场景的流程示意图。
(1)在接收数据(例如HTTP参数)后,将HTTP参数处理,得到至少一个用户参数。对于每个用户参数,切割用户参数为key值和value值两部分;
(2)通过至少一个模板,分别根据key值和value值构建至少一个用户SQL语句实例;
(3)通过词法语法分析和语法分析引擎,根据构建的至少一个用户SQL语句实例,生成至少一个AST树;
(4)遍历至少一个AST树,进行语义标记;
(5)通过语义标记的结果和原始语义进行等价分析对SQL注入进行判定。
通过对HTTP参数的解码还原,将HTTP参数处理切割为用户参数key值和value值两部分。对多个用户参数进行分割,在进一步的提取每一个参数的key和value。
通过至少一个模板,分别根据key值和value值构建至少一个用户SQL语句实例,可以是通过预置的各种SQL注入实际使用的场景对用户参数进行构建SQL语句实例。
进一步地,通过单引号、双引号、无引号、单括号、多层括号等模板文件进行构造模拟实际的SQL注入场景。
通过词法语法分析和语法分析引擎,根据构建的至少一个用户SQL语句实例,生成至少一个AST树,其实现方式是通过词法分析引擎将关键字和变量进行标记,通过语法解析引擎生成对应语法树。
遍历至少一个AST树,进行语义标记。其实现方式是通过AST语法树的遍历对SQL语句关键词和变量的位置和数量进行标记。
通过语义标记的结果和原始语义进行等价分析对SQL注入进行判定。其实现方式是通过对语法树的关键词、变量和原始模板的关键词和变量进行位置和数量的对比,判断两棵语法树的形状是否发生了变化,如果改变了原来语法树的结构,则为SQL注入攻击。
由于开发者对用户输入过滤不够严格,导致数据库执行恶意SQL语句。如图4的应用场景中,针对web接口SQL注入攻击的特点,通过语义分析提取用户提交的数据,从用户输入的参数中构造SQL语句,通过语法分析对SQL语句的整体AST进行遍历,检测AST结构的变化对SQL注入的检测。可以减少SQL注入的漏报。
图5为本发明SQL注入检测装置实施例结构示意图。如图5所示,该基于装置,包括:
第一处理模块501,用于接收用户请求,用户请求包括至少一个参数,对于至少一个参数中的每个参数,通过预设的至少一个SQL模板,构建对应至少一个SQL模板的至少一个SQL语句;
第二处理模块502,用于根据至少一个SQL语句生成至少一个语法树;
第三处理模块503,用于将至少一个SQL模板对应的至少一个标准语法树与至少一个语法树对比,根据对比结果判断用户请求是否为SQL注入。
可选地,第一处理模块501还用于:
接收用户请求,将用户请求切割,得到至少一个参数,参数由key值和value值组成;
对于至少一个参数中的每个参数,根据参数的key值和value值,通过预设的至少一个SQL模板,构建对应至少一个SQL模板的至少一个SQL语句。
可选地,用户请求包括http请求。
可选地,第二处理模块502还用于:
通过词法分析引擎,标记至少一个SQL语句中的关键字和变量;
通过语法解析引擎,根据至少一个SQL语句中标记的关键字和变量生成至少一个语法树。
可选地,第三处理模块503还用于:
将至少一个SQL模板对应的至少一个标准语法树中的关键字和变量与至少一个语法树的关键字和变量对比。
可选地,第三处理模块503还用于:
将至少一个SQL模板对应的至少一个标准语法树中的关键字的位置和变量的位置与至少一个语法树的关键字的位置和变量的位置对比。
可选地,第三处理模块503还用于:
将至少一个SQL模板对应的至少一个标准语法树中的关键字的数量和变量的数量与至少一个语法树的关键字的数量和变量的数量对比。
举个例子如下:
图6示例了一种电子设备的实体结构示意图,如图6示,该电子设备可以包括:处理器(processor)601、通信接口(Communications Interface)602、存储器(memory)603和通信总线604,其中,处理器601,通信接口602,存储器603通过通信总线604完成相互间的通信。处理器601可以调用存储器603中的逻辑指令,以执行如下方法:接收用户请求,用户请求包括至少一个参数,对于至少一个参数中的每个参数,通过预设的至少一个SQL模板,构建对应至少一个SQL模板的至少一个SQL语句;根据至少一个SQL语句生成至少一个语法树;将至少一个SQL模板对应的至少一个标准语法树与至少一个语法树对比,根据对比结果判断用户请求是否为SQL注入。
此外,上述的存储器603中的逻辑指令可以通过软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
另一方面,本发明实施例还提供一种计算机程序产品,计算机程序产品包括存储在非暂态计算机可读存储介质上的计算机程序,计算机程序包括程序指令,当程序指令被计算机执行时,计算机能够执行上述各实施例提供的SQL注入检测方法,例如包括:接收用户请求,用户请求包括至少一个参数,对于至少一个参数中的每个参数,通过预设的至少一个SQL模板,构建对应至少一个SQL模板的至少一个SQL语句;根据至少一个SQL语句生成至少一个语法树;将至少一个SQL模板对应的至少一个标准语法树与至少一个语法树对比,根据对比结果判断用户请求是否为SQL注入。
又一方面,本发明还提供一种非暂态计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现以执行上述各实施例提供的SQL注入检测方法,例如包括:接收用户请求,用户请求包括至少一个参数,对于至少一个参数中的每个参数,通过预设的至少一个SQL模板,构建对应至少一个SQL模板的至少一个SQL语句;根据至少一个SQL语句生成至少一个语法树;将至少一个SQL模板对应的至少一个标准语法树与至少一个语法树对比,根据对比结果判断用户请求是否为SQL注入。
以上所描述的装置实施例仅仅是示意性的,其中作为分离部件说明的模块可以是或者也可以不是物理上分开的,作为模块显示的部件可以是或者也可以不是物理模块,即可以位于一个地方,或者也可以分布到多个网络模块上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性的劳动的情况下,即可以理解并实施。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到各实施方式可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件。基于这样的理解,上述技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行各个实施例或者实施例的某些部分的方法。
最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。
Claims (11)
1.一种SQL注入检测方法,其特征在于,所述方法包括:
接收用户请求,所述用户请求包括至少一个参数,对于所述至少一个参数中的每个参数,通过预设的至少一个SQL模板,构建对应所述至少一个SQL模板的至少一个SQL语句;
根据所述至少一个SQL语句生成至少一个语法树;
将所述至少一个SQL模板对应的至少一个标准语法树与所述至少一个语法树对比,根据对比结果判断所述用户请求是否为SQL注入。
2.根据权利要求1所述的SQL注入检测方法,其特征在于,所述接收用户请求,所述用户请求包括至少一个参数,对于所述至少一个参数中的每个参数,通过预设的至少一个SQL模板,构建对应所述至少一个SQL模板的至少一个SQL语句,包括:
接收用户请求,将所述用户请求切割,得到所述至少一个参数,所述参数由key值和value值组成;
对于所述至少一个参数中的每个参数,根据所述参数的key值和value值,通过预设的至少一个SQL模板,构建对应所述至少一个SQL模板的至少一个SQL语句。
3.根据权利要求1-2任一项所述的SQL注入检测方法,其特征在于,所述用户请求包括http请求。
4.根据权利要求1所述的SQL注入检测方法,其特征在于,所述根据所述至少一个SQL语句生成至少一个语法树,包括:
通过词法分析引擎,标记所述至少一个SQL语句中的关键字和变量;
通过语法解析引擎,根据所述至少一个SQL语句中标记的关键字和变量生成所述至少一个语法树。
5.根据权利要求4所述的SQL注入检测方法,其特征在于,所述将所述至少一个SQL模板对应的至少一个标准语法树与所述至少一个语法树对比,包括:
将所述至少一个SQL模板对应的至少一个标准语法树中的关键字和变量与所述至少一个语法树的关键字和变量对比。
6.根据权利要求5所述的SQL注入检测方法,其特征在于,所述将所述至少一个SQL模板对应的至少一个标准语法树中的关键字和变量与所述至少一个语法树的关键字和变量对比,包括:
将所述至少一个SQL模板对应的至少一个标准语法树中的关键字的位置和变量的位置与所述至少一个语法树的关键字的位置和变量的位置对比。
7.根据权利要求5-6任一项所述的SQL注入检测方法,其特征在于,所述将所述至少一个SQL模板对应的至少一个标准语法树中的关键字和变量与所述至少一个语法树的关键字和变量对比,包括:
将所述至少一个SQL模板对应的至少一个标准语法树中的关键字的数量和变量的数量与所述至少一个语法树的关键字的数量和变量的数量对比。
8.一种SQL注入检测装置,其特征在于,所述方法包括:
第一处理模块,用于接收用户请求,所述用户请求包括至少一个参数,对于所述至少一个参数中的每个参数,通过预设的至少一个SQL模板,构建对应所述至少一个SQL模板的至少一个SQL语句;
第二处理模块,用于根据所述至少一个SQL语句生成至少一个语法树;
第三处理模块,用于将所述至少一个SQL模板对应的至少一个标准语法树与所述至少一个语法树对比,根据对比结果判断所述用户请求是否为SQL注入。
9.一种电子设备,包括存储器、处理器及存储在所述存储器上并可在所述处理器上运行的计算机程序,其特征在于,所述处理器执行所述程序时实现如权利要求1至7任一项所述的SQL注入检测方法的步骤。
10.一种非暂态计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现如权利要求1至7任一项所述的SQL注入检测方法的步骤。
11.一种计算机程序产品,其上存储有可执行指令,其特征在于,该指令被处理器执行时使处理器实现如权利要求1至7中任一项所述SQL注入检测方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111580861.8A CN114443685A (zh) | 2021-12-22 | 2021-12-22 | 一种sql注入检测方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111580861.8A CN114443685A (zh) | 2021-12-22 | 2021-12-22 | 一种sql注入检测方法及装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN114443685A true CN114443685A (zh) | 2022-05-06 |
Family
ID=81364254
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202111580861.8A Pending CN114443685A (zh) | 2021-12-22 | 2021-12-22 | 一种sql注入检测方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114443685A (zh) |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102185930A (zh) * | 2011-06-09 | 2011-09-14 | 北京理工大学 | 一种sql注入漏洞检测方法 |
CN107526968A (zh) * | 2017-08-18 | 2017-12-29 | 郑州云海信息技术有限公司 | 一种基于语法分析的sql防注入方法和装置 |
CN107644175A (zh) * | 2017-09-13 | 2018-01-30 | 南京南瑞集团公司 | 一种防止sql注入的方法 |
CN108573152A (zh) * | 2017-03-14 | 2018-09-25 | 北京京东尚科信息技术有限公司 | 检测sql注入攻击的方法、装置、服务器和存储介质 |
CN110362597A (zh) * | 2019-06-28 | 2019-10-22 | 华为技术有限公司 | 一种结构化查询语言sql注入检测方法及装置 |
KR102258956B1 (ko) * | 2020-11-20 | 2021-06-02 | (주)시큐레이어 | 관계형 데이터베이스를 관리하기 위한 언어인 SQL(Structured Query Language)이 사용되는 환경에서 공격을 탐지하기 위한 방법 및 이를 사용한 서버 |
-
2021
- 2021-12-22 CN CN202111580861.8A patent/CN114443685A/zh active Pending
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102185930A (zh) * | 2011-06-09 | 2011-09-14 | 北京理工大学 | 一种sql注入漏洞检测方法 |
CN108573152A (zh) * | 2017-03-14 | 2018-09-25 | 北京京东尚科信息技术有限公司 | 检测sql注入攻击的方法、装置、服务器和存储介质 |
CN107526968A (zh) * | 2017-08-18 | 2017-12-29 | 郑州云海信息技术有限公司 | 一种基于语法分析的sql防注入方法和装置 |
CN107644175A (zh) * | 2017-09-13 | 2018-01-30 | 南京南瑞集团公司 | 一种防止sql注入的方法 |
CN110362597A (zh) * | 2019-06-28 | 2019-10-22 | 华为技术有限公司 | 一种结构化查询语言sql注入检测方法及装置 |
KR102258956B1 (ko) * | 2020-11-20 | 2021-06-02 | (주)시큐레이어 | 관계형 데이터베이스를 관리하기 위한 언어인 SQL(Structured Query Language)이 사용되는 환경에서 공격을 탐지하기 위한 방법 및 이를 사용한 서버 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10146532B2 (en) | Apparatus and method for detecting code cloning of software | |
CN107292170B (zh) | Sql注入攻击的检测方法及装置、*** | |
Gupta et al. | Part-of-speech tagging of program identifiers for improved text-based software engineering tools | |
CN112699665B (zh) | 一种安全报告文本的三元组抽取方法、装置及电子设备 | |
US8954940B2 (en) | Integrating preprocessor behavior into parsing | |
CN108491228B (zh) | 一种二进制漏洞代码克隆检测方法及*** | |
KR20220028038A (ko) | 자연어 이해 프레임워크에서 발화에 대한 복수의 의미 표현들의 도출 | |
US9311058B2 (en) | Jabba language | |
CN110096599B (zh) | 知识图谱的生成方法及装置 | |
WO2024114655A1 (zh) | 一种规则表达式匹配方法、装置及计算机可读存储介质 | |
CN116149669B (zh) | 一种基于二进制文件的软件成分分析方法、装置以及介质 | |
CN112580331A (zh) | 政策文本的知识图谱构建方法及*** | |
CN113419721B (zh) | 基于web的表达式编辑方法、装置、设备和存储介质 | |
Chida et al. | Repairing dos vulnerability of real-world regexes | |
CN113885880A (zh) | 一种多规则匹配方法、装置及设备 | |
CN114385148A (zh) | 一种实现联动功能的方法、装置、设备和存储介质 | |
CN112988163A (zh) | 编程语言智能适配方法、装置、电子设备和介质 | |
CN117056347A (zh) | Sql语句永真式注入检测方法、装置、计算机设备及存储介质 | |
WO2023138078A1 (zh) | 编程语言的解析方法及装置、非易失性存储介质 | |
CN116467047A (zh) | 针对容器配置合规性的检测方法、装置、存储介质及终端 | |
CN113094706A (zh) | 一种WebShell检测方法、装置、设备及可读存储介质 | |
CN113138913A (zh) | Java代码注入检测方法、装置、设备及存储介质 | |
CN116361793A (zh) | 代码检测方法、装置、电子设备及存储介质 | |
CN115913655A (zh) | 一种基于流量分析和语义分析的Shell命令注入检测方法 | |
US20100057704A1 (en) | Automatic Test Map Generation for System Verification Test |
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 |