一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

SQL注入攻击的检测方法及系统、电子设备及存储介质与流程

2022-06-25 00:28:30 来源:中国专利 TAG:

sql注入攻击的检测方法及系统、电子设备及存储介质
技术领域
1.本发明涉及信息安全技术领域,特别涉及一种sql注入攻击的检测方法及系统、电子设备及存储介质。


背景技术:

2.sql(structured query language)即结构化查询语言,是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统。sql注入是指攻击者通过恶意查询语句来获取服务器数据库信息的攻击行为,可以绕开身份认证、窃取用户信息、篡改数据内容等,引发严重后果,具有攻击危害大、类型多、变异快、攻击隐蔽等特点。当前,sql注入已经成为web应用程序的首要威胁,sql注入检测因此成为web安全领域的研究重点。
3.传统的sql注入检测方法是基于规则、正则表达式或者特定的检测模式,需要先分析特定注入产生的原因,再制定相应的检测规则。现有技术中提出了一种基于语法树特征匹配的sql注入检测模型,该模型在已知数据库源代码的情况下,建立当前程序数据库代码的语法特征树,从中提取出合法的sql语句和语法树模型,当数据库拼接用户输入时,若用户输入与合法模型不匹配,则会产生告警。这种sql注入攻击检测模型的准确率很高,运行时的系统负荷较小,但要求也比较苛刻,需要预先知道程序的源代码,还需要大量的前期工作来分析统计出合法sql语法树模型。现有技术中还提出了另一种基于特征匹配的sql注入攻击检测系统,该系统通过分析sql注入攻击语句的语法构造总结出非法语句的特征,利用正则表达式来分辨sql注入语句和合法语句。其优点是不需要知道后台信息且实现简单,也具有一定的可扩展性以防御其他类型的网络攻击,但检测准确率主要依赖于分析得到的sql注入攻击语句特征值,这种特征值不管是依靠业内专家提供的还是样本分析得到的,都很难覆盖到每一种情况。
4.传统的sql注入检测方法是基于规则、正则表达式或者特定的检测模式。由于sql注入形式多样,不可避免地出现新的方法绕过传统检测;同时基于现有规则,很难识别新的攻击。总之,该方法受制于不断更新的系统软件和陆续被曝光的漏洞,已经很难有进一步的提升空间,在目前环境下也不能发挥很好的效果。


技术实现要素:

5.本发明提供一种误报率可控、支持不断更新的sql注入攻击的检测方法及系统、电子设备及存储介质。
6.本发明提供一种sql注入攻击的检测方法,包括:
7.基于用户输入的字符串,构造sql语句;
8.将所述sql语句输入词法分析器,判断所述sql语句是否匹配语法树;其中,所述词法分析器基于预设sql语法的第一类关键字构建形成;所述语法树基于解析器生成器的语法规则,收集预设sql语法的相应sql注入语句构建形成;
9.当所述sql语句不匹配语法树,则识别出所述用户输入的字符串不构成sql注入攻击;
10.当所述sql有语句匹配语法树,将用户输入的字符串输入词法分析器,基于所述用户输入的字符串是否包含与sql注入语句相关的第二类关键字的判断结果,识别出所述用户输入的字符串是否构成sql注入攻击。
11.优选的是,所述的sql注入攻击的检测方法,其中,所述基于用户输入的字符串,构造sql语句具体包括:
12.基于用户输入的字符串,给每个词的属性进行整数编码,并将每个词的信息保存,生成sql语句。
13.优选的是,所述的sql注入攻击的检测方法,其中,还包括:当所述预设sql语法更新,所述词法分析器基于更新的预设sql语法进行更新,所述预设sql语法包括sql server、mysql、oracle、postgresql中的至少一种。
14.优选的是,所述的sql注入攻击的检测方法,其中,所述基于所述用户输入的字符串是否包含与sql注入语句相关的第二关键字的判断结果,识别出所述用户输入的字符串是否构成sql注入攻击具体包括:
15.当所述基于所述用户输入的字符串是否包含与sql注入语句相关的第二关键字的判断结果为是,则识别出所述用户输入的字符串构成sql注入攻击;
16.当所述基于所述用户输入的字符串是否包含与sql注入语句相关的第二关键字的判断结果为否,则识别出所述用户输入的字符串不构成sql注入攻击。
17.本发明还提供一种sql注入攻击的检测系统,包括:
18.sql语句构建模块,用于基于用户输入的字符串,构造sql语句;
19.匹配模块,用于将所述sql语句输入词法分析器,判断所述sql语句是否匹配语法树;其中,所述词法分析器基于预设sql语法的第一类关键字构建形成;所述语法树基于解析器生成器的语法规则,收集预设sql语法的相应sql注入语句构建形成;
20.当所述sql语句不匹配语法树,则识别出所述用户输入的字符串不构成sql注入攻击;
21.检测模块,用于当所述sql有语句匹配语法树,将用户输入的字符串输入词法分析器,基于所述用户输入的字符串是否包含与sql注入语句相关的第二类关键字的判断结果,识别出所述用户输入的字符串是否构成sql注入攻击。
22.优选的是,所述的sql注入攻击的检测系统,其中,所述基于用户输入的字符串,构造sql语句具体包括:
23.基于用户输入的字符串,给每个词的属性进行整数编码,并将每个词的信息保存,生成sql语句。
24.优选的是,所述的sql注入攻击的检测系统,其中,还包括更新模块,所述更新模块用于当所述预设sql语法更新,将所述词法分析器基于更新的预设sql语法进行更新,所述预设sql语法包括sql server、mysql、oracle、postgresql中的至少一种。
25.优选的是,所述的sql注入攻击的检测系统,其中,所述基于所述用户输入的字符串是否包含与sql注入语句相关的第二关键字的判断结果,识别出所述用户输入的字符串是否构成sql注入攻击具体包括:
26.当所述基于所述用户输入的字符串是否包含与sql注入语句相关的第二关键字的判断结果为是,则识别出所述用户输入的字符串构成sql注入攻击;
27.当所述基于所述用户输入的字符串是否包含与sql注入语句相关的第二关键字的判断结果为否,则识别出所述用户输入的字符串不构成sql注入攻击。
28.本发明提供一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现所述的sql注入攻击的检测方法的步骤。
29.本发明提供一种非暂态计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现所述的sql注入攻击的检测方法的步骤。
30.本发明通过对相关数据库建立完备的词法分析库,基于预设sql语法,构造词法分析器,并收集不同种sql语言常见的sql注入语句,来构建相应的语法树,通过判断所述sql语句是否匹配语法树,对不构成sql注入攻击进行排除,再基于所述用户输入的字符串是否包含与sql注入语句相关的第二类关键字的判断结果,识别出所述用户输入的字符串是否构成sql注入攻击,可有效提升检测准确率;本发明的方法基于上下文逻辑,误报率可控,只要将有危险性的语法加入到词法分析器里面,理论上就没有误报;如果语法有所更新,只需要将相应的语法规则写入词法分析器,具有更好的可适应能力。
附图说明
31.为了更清楚地说明本发明或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
32.图1为本发明提供的sql注入攻击的检测方法的示意图;
33.图2为本发明提供的sql注入攻击的检测系统的示意图;
34.图3为本发明提供的电子设备的示意图。
具体实施方式
35.为使本发明的目的、技术方案和优点更加清楚,下面将结合本发明中的附图,对本发明中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
36.图1为本发明提供的sql注入攻击的检测方法的示意图,如图1所示,该方法包括:
37.s1:基于用户输入的字符串,构造sql语句;
38.s1中:基于用户输入的字符串,给每个词的属性进行整数编码,并将每个词的信息保存,生成sql语句。例如,对于初步形成的sql查询字符串,如select a from b,首先要通过词法分析将select、a之类的特殊意义符号给予一个数值,即给每个词(token)的属性进行整数编码,其中select和from是关键字,a和b属于普通字符。然后将每个token的信息保存,这样就生成了一个token list。优选的,s1中还包括用flex词法分析流程,flex工作流程如下:
39.(1)扫描每一条正则式规则ri,为之构造一个非确定的有限自动机nfa mi。
40.(2)将各条正则式对应的nfa mi合并成一个新的nfa m。
41.(3)将nfa m等价变换成dfa d,并生成该dfa的状态转换矩阵和控制执行程序。
42.对于一个flex源文件,用%%分隔每个部分内容,且整个程序分为以下3个部分:
43.定义部分
44.%%
45.识别规则部分
46.%%
47.辅助函数部分
48.s2:将所述sql语句输入词法分析器,判断所述sql语句是否匹配语法树;其中,所述词法分析器基于预设sql语法的第一类关键字构建形成;所述语法树基于解析器生成器(解析器生成器优选为通用的bison)的语法规则,收集预设sql语法的相应sql注入语句构建形成;
49.s2可以依据bison的语法规则,且收集不同种sql语言常见的sql注入语句,来构建相应的语法树。具体地,构造语法树的原理为:该语法器依靠对后端的sql注入语言理解,利用bison以lalr(1)算法来构建整个多语言语法树,其难点在于处理不同sql语言相似算法的shift-reduce冲突以及相同关键字的不同用法。例如:oracle分页查询需要用到rownum关键字,而mysql是limit关键字且用法不同;oracle只能用单引号括住字符串,而mysql用双引号和单引号都行;oracle的if begin关键字和flex的相应关键字有冲突,且oracle的if语句与sql server、mysql相比改变都较大。
50.构建语法树的bison语法格式为:
51.定义部分
52.%%
53.语法表达式及处理部分
54.%%
55.辅助函数部分
56.s2还包括:当所述预设sql语法更新,所述词法分析器基于更新的预设sql语法进行更新,所述预设sql语法包括sql server、mysql、oracle、postgresql中的至少一种。目前,该语义识别语法器的识别关键字token数量为233个,包括4类sql语法(sql server、mysql、oracle、postgresql中可能被利用的数据库查询语句),后续在使用过程中,还可以不断更新,新增或删除。
57.s3:当所述sql语句不匹配语法树,则识别出所述用户输入的字符串不构成sql注入攻击;
58.s4:当所述sql有语句匹配语法树,将用户输入的字符串输入词法分析器,基于所述用户输入的字符串是否包含与sql注入语句相关的第二类关键字的判断结果,识别出所述用户输入的字符串是否构成sql注入攻击。
59.一个用户输入字符串经过之前s1-s3后将进入s4,那就是判断用户输入的字符串是否包含与sql注入语句相关的第二类关键字。如果包含,那么就能判断当前用户输入构成了sql注入攻击,否则不是sql注入攻击。第二类关键字是第一类关键字的子集,是预先设定
的,具体可以根据经验来设定,选择一些常用的与sql注入语句相关的关键字。
60.所述基于所述用户输入的字符串是否包含与sql注入语句相关的第二关键字的判断结果,识别出所述用户输入的字符串是否构成sql注入攻击具体包括:
61.当所述基于所述用户输入的字符串是否包含与sql注入语句相关的第二关键字的判断结果为是,则识别出所述用户输入的字符串构成sql注入攻击;
62.当所述基于所述用户输入的字符串是否包含与sql注入语句相关的第二关键字的判断结果为否,则识别出所述用户输入的字符串不构成sql注入攻击。
63.上述流程从逻辑上实现了sql注入的完整识别。本发明与传统的正则匹配相比,语法处理中的词法分析解决的是一个多正则表达式匹配问题,但是传统的正则匹配的算法效果与其使用的处理算法相关,且添加一个新规则比较麻烦,在攻击随时变化以及sql版本更迭很快的时代仅使用正则匹配难免有误报,而语义处理中除了解决正则匹配之外,处理的是基本的攻击逻辑即攻击最终将形成何种能产生效果的语法,只要将有危险性的语法加入到语义词法分析器里面,理论上就没有误报。本发明的优点可归纳为:
64.1.通过对相关数据库建立完备的词法分析库,基于预设sql语法,构造词法分析器,可有效提升检测准确率。
65.2.由于未考虑关键字与普通字符串的区别,传统的正则匹配容易出现误报。例如select*from data where id=selectuser,这是一个正常的查询,不过id名字包含了select这个关键字,若是正则匹配关键字过滤则视其为攻击,但若是语法分析则视其为一个普通字符串,再通过最后一步的词法分析可以判断出该用户输入构成了完整的sql查询语句但是不构成注入攻击(不会产生误报)。本发明给出的方法基于上下文逻辑,误报率可控(即语义词法分析器是否加入该攻击对应语句的语法规则)且理论上可降至0。
66.3.如果语法有所更新,只需要将相应的语法规则写入该词法分析器。例如mysql在某新的语法中存在可以利用的规则,只需要在语义词法分析器加入就行。
67.下面对本发明提供的sql注入攻击的检测系统进行描述,下文描述的sql注入攻击的检测系统与上文描述的sql注入攻击的检测方法可相互对应参照。
68.图2为本发明提供的sql注入攻击的检测系统的示意图,如图2所示,该系统包括:
69.sql语句构建模块10,用于基于用户输入的字符串,构造sql语句;
70.匹配模块20,用于将所述sql语句输入词法分析器,判断所述sql语句是否匹配语法树;其中,所述词法分析器基于预设sql语法的第一类关键字构建形成;所述语法树基于解析器生成器的语法规则,收集预设sql语法的相应sql注入语句构建形成;
71.当所述sql语句不匹配语法树,则识别出所述用户输入的字符串不构成sql注入攻击;
72.检测模块30,用于当所述sql有语句匹配语法树,将用户输入的字符串输入词法分析器,基于所述用户输入的字符串是否包含与sql注入语句相关的第二类关键字的判断结果,识别出所述用户输入的字符串是否构成sql注入攻击。
73.所述基于用户输入的字符串,构造sql语句具体包括:
74.基于用户输入的字符串,给每个词的属性进行整数编码,并将每个词的信息保存,生成sql语句。
75.还包括更新模块,所述更新模块用于当所述预设sql语法更新,将所述词法分析器
基于更新的预设sql语法进行更新,所述预设sql语法包括sql server、mysql、oracle、postgresql中的至少一种。
76.所述基于所述用户输入的字符串是否包含与sql注入语句相关的第二关键字的判断结果,识别出所述用户输入的字符串是否构成sql注入攻击具体包括:
77.当所述基于所述用户输入的字符串是否包含与sql注入语句相关的第二关键字的判断结果为是,则识别出所述用户输入的字符串构成sql注入攻击;
78.当所述基于所述用户输入的字符串是否包含与sql注入语句相关的第二关键字的判断结果为否,则识别出所述用户输入的字符串不构成sql注入攻击。
79.图3示例了一种电子设备的实体结构示意图,该电子设备可以包括:处理器(processor)310、通信接口(communications interface)320、存储器(memory)330和通信总线340,其中,处理器310,通信接口320,存储器330通过通信总线340完成相互间的通信。处理器310可以调用存储器330中的逻辑指令,以执行一种sql注入攻击的检测方法,该方法包括:
80.基于用户输入的字符串,构造sql语句;
81.将所述sql语句输入词法分析器,判断所述sql语句是否匹配语法树;其中,所述词法分析器基于预设sql语法的第一类关键字构建形成;所述语法树基于解析器生成器的语法规则,收集预设sql语法的相应sql注入语句构建形成;
82.当所述sql语句不匹配语法树,则识别出所述用户输入的字符串不构成sql注入攻击;
83.当所述sql有语句匹配语法树,将用户输入的字符串输入词法分析器,基于所述用户输入的字符串是否包含与sql注入语句相关的第二类关键字的判断结果,识别出所述用户输入的字符串是否构成sql注入攻击。
84.此外,上述的存储器330中的逻辑指令可以通过软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(rom,read-only memory)、随机存取存储器(ram,random access memory)、磁碟或者光盘等各种可以存储程序代码的介质。
85.另一方面,本发明还提供一种计算机程序产品,所述计算机程序产品包括存储在非暂态计算机可读存储介质上的计算机程序,所述计算机程序包括程序指令,当所述程序指令被计算机执行时,计算机能够执行一种sql注入攻击的检测方法,该方法包括:
86.基于用户输入的字符串,构造sql语句;
87.将所述sql语句输入词法分析器,判断所述sql语句是否匹配语法树;其中,所述词法分析器基于预设sql语法的第一类关键字构建形成;所述语法树基于解析器生成器的语法规则,收集预设sql语法的相应sql注入语句构建形成;
88.当所述sql语句不匹配语法树,则识别出所述用户输入的字符串不构成sql注入攻击;
89.当所述sql有语句匹配语法树,将用户输入的字符串输入词法分析器,基于所述用户输入的字符串是否包含与sql注入语句相关的第二类关键字的判断结果,识别出所述用户输入的字符串是否构成sql注入攻击。
90.又一方面,本发明还提供一种非暂态计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现以执行一种sql注入攻击的检测方法,该方法包括:
91.基于用户输入的字符串,构造sql语句;
92.将所述sql语句输入词法分析器,判断所述sql语句是否匹配语法树;其中,所述词法分析器基于预设sql语法的第一类关键字构建形成;所述语法树基于解析器生成器的语法规则,收集预设sql语法的相应sql注入语句构建形成;
93.当所述sql语句不匹配语法树,则识别出所述用户输入的字符串不构成sql注入攻击;
94.当所述sql有语句匹配语法树,将用户输入的字符串输入词法分析器,基于所述用户输入的字符串是否包含与sql注入语句相关的第二类关键字的判断结果,识别出所述用户输入的字符串是否构成sql注入攻击。
95.以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性的劳动的情况下,即可以理解并实施。
96.通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到各实施方式可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件。基于这样的理解,上述技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如rom/ram、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行各个实施例或者实施例的某些部分所述的方法。
97.最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献