CN109150886B - 结构化查询语言注入攻击检测方法及相关设备 - Google Patents
结构化查询语言注入攻击检测方法及相关设备 Download PDFInfo
- Publication number
- CN109150886B CN109150886B CN201811014228.0A CN201811014228A CN109150886B CN 109150886 B CN109150886 B CN 109150886B CN 201811014228 A CN201811014228 A CN 201811014228A CN 109150886 B CN109150886 B CN 109150886B
- Authority
- CN
- China
- Prior art keywords
- attack
- word
- target
- probability
- sql
- 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.)
- Active
Links
Images
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L63/00—Network architectures or network communication protocols for network security
- H04L63/14—Network architectures or network communication protocols for network security for detecting or protecting against malicious traffic
- H04L63/1408—Network architectures or network communication protocols for network security for detecting or protecting against malicious traffic by monitoring network traffic
- H04L63/1416—Event detection, e.g. attack signature detection
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F40/00—Handling natural language data
- G06F40/20—Natural language analysis
- G06F40/205—Parsing
- G06F40/216—Parsing using statistical methods
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F40/00—Handling natural language data
- G06F40/20—Natural language analysis
- G06F40/279—Recognition of textual entities
- G06F40/284—Lexical analysis, e.g. tokenisation or collocates
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L63/00—Network architectures or network communication protocols for network security
- H04L63/14—Network architectures or network communication protocols for network security for detecting or protecting against malicious traffic
- H04L63/1441—Countermeasures against malicious traffic
- H04L63/1466—Active attacks involving interception, injection, modification, spoofing of data unit addresses, e.g. hijacking, packet injection or TCP sequence number attacks
Landscapes
- Engineering & Computer Science (AREA)
- Computer Security & Cryptography (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- Computational Linguistics (AREA)
- Signal Processing (AREA)
- Computer Networks & Wireless Communication (AREA)
- Health & Medical Sciences (AREA)
- Artificial Intelligence (AREA)
- Audiology, Speech & Language Pathology (AREA)
- Computing Systems (AREA)
- General Health & Medical Sciences (AREA)
- General Physics & Mathematics (AREA)
- Computer Hardware Design (AREA)
- Probability & Statistics with Applications (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本申请公开了一种结构化查询语言注入攻击检测方法及相关设备,在该方法中,在获取到待检测到的目标字符串之后,将该目标字符串分词为多个目标词,得到多个目标词顺序排列构建的词序列,并依据预先构建的SQL攻击库中多个攻击词组各自出现的概率,便可以确定出词序列由该SQL攻击库中多个攻击词组成的第一概率。通过确定出的第一概率可以更为准确的反映出词序列对应的目标字符串属于SQL注入攻击的可能性大小,从而可以更为准确的检测出该目标字符串属于SQL注入攻击的可能性,有利于降低检测SQL注入攻击的误检率和漏报率。
Description
技术领域
本申请涉及网络技术领域,尤其涉及一种结构化查询语言注入攻击检测方法及相关设备。
背景技术
结构化查询语言(Structured Query Language,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示出了本申请实施例的一种结构化查询语言注入攻击检测的系统的一种组成架构示意图;
图2示出了本申请实施例的一种结构化查询语言注入攻击检测方法的一种流程示意图;
图3示出了本申请实施例中对目标字符串分词的一种实现流程示意图;
图4示出了本申请实施例中确定词序列属于SQL攻击库的第一概率的一种流程示意图;
图5示出了本申请实施例构建SQL攻击库和正常访问库的实现原理示意图;
图6示出了本申请实施例中构建SQL攻击库和正常访问库的一种流程示意图;
图7示出了本申请实施例中确定攻击词组在该多个SQL攻击注入样本中出现的条件概率的一种流程示意图;
图8示出了本申请实施例中结构化查询语言注入攻击检测方法的又一种流程示意图;
图9示出了本申请实施例中结构化查询语言注入攻击检测的装置一种组成示意图;
图10示出了本申请实施例中服务器的一种组成结构示意图。
具体实施方式
本申请实施例的结构化查询语言(Structured Query Language,SQL)注入攻击检测的方法、装置、服务器及存储介质适用于检测访问请求是否存在SQL注入攻击,以降低检测SQL注入攻击的误报漏报率,如,检测向网站发起的访问请求中是否存在SQL注入攻击,以便于有效防御向网站发起的SQL注入攻击。
为了解决检测SQL注入攻击的误报率较高的问题,本申请通过对SQL注入攻击样本生成SQL攻击库,在该SQL攻击库中存储了多个攻击词组在该SQL攻击库中出现的概率,该攻击词组为由SQL注入攻击样本分词出的至少一个攻击词组成。在此基础上,通过将待检测的目标字符串分词为多个目标词,得到多个目标词顺序排列构建的词序列,并依据该SQL攻击库中多个攻击词组各自出现的概率,便可以确定出词序列由该SQL攻击库中多个攻击词组成的第一概率,从而识别出待检测目标字符串是否为SQL攻击。
为了便于理解,先对本申请的方案所适用的系统进行介绍。如,参见图1,其示出了本申请一种SQL注入攻击检测方法所适用的一种系统的组成架构示意图。
在图1所示的系统中包括:终端10、服务器20以及模型数据库30。该终端10与服务器20之间通过网络实现通信连接,服务器20能够访问模型数据库30。
其中,该终端10可以为手机、平板电脑、笔记本电脑、台式电脑等等。
该终端10可以向服务器20发起访问请求,以请求访问服务器中的数据或者获取业务服务。
服务器20响应于终端的访问请求,执行相应的业务处理,并将针对该访问请求的响应结果反馈给该终端10。
如,终端10可以通过浏览器向服务器发送访问请求;而服务器响应该访问请求,并在得到响应数据之后,将该响应数据以网页数据的形式反馈给终端。
在本申请实施例中,该服务器20在接收到终端的访问请求之后,还会检测该访问请求是否包含SQL注入攻击,以避免由于SQL攻击注入导致服务器中的数据被攻击。
可以理解的是,该服务器20可以是网站中的服务器,通过该服务器可以向终端提供网站所涉及到的业务服务;该服务器也可以为数据库服务器,以使得终端可以向数据库服务器发起数据存储、查询等请求。当然,在实际应用中,该服务器还可以是任意需要进行SQL注入攻击检测的设备,本申请对此不加以限制。
该模型数据库30用于存储服务器检测SQL注入攻击所需的相关数据,还可以存储服务器处理终端发起的访问请求所需查询的数据。如,在本申请实施例中,该模型数据库可以用于存储SQL攻击库中包含的数据。
其中,服务器20通过有线或无线通信方式访问该模型数据库30。
可以理解的是,在图1中是以SQL注入攻击检测的系统包括终端10为例进行说明,但服务器20可以针对输入到该服务器的任意数据进行SQL注入攻击检测,例如网站开发人员在开发过程中进行SQL注入攻击检测的测试时输入的数据,在这种情况下,该SQL注入攻击检测的系统中也可以不包含终端10。
下面结合流程图对本申请实施例中SQL注入攻击检测的方法进行介绍。如,参见图2,其示出了本申请一种SQL注入攻击检测的方法一个实施例的流程示意图,本实施例的方法可以应用于前面提到的服务器,该方法可以包括:
S201,获取待检测的目标字符串。
在一种可能的情况中,该目标字符串可以是接收到的访问请求所对应的字符串。如,攻击者在发起SQL攻击时,会在访问请求中携带SQL注入攻击的代码,所以接收到的对服务器的访问请求时,可以将该访问请求作为待检测的目标字符串。
在又一种可能的情况中,待检测到的目标字符串也可以是从访问请求中提取出的部分字符串。如,从访问请求中提取出属于SQL语句的字符串或者提取特定位置范围内的SQL语句,并将提取出的属于SQL语句的字符串确定为待检测到的目标字符串。
例如,网站访问请求为HTTP://xxx.xxx.xxx/abc.asp?id=XX,确定待检测的目标字符串可以为“abc.asp?id=XX”。
可以理解的是,以上目标字符串可以是服务器从终端发送的访问请求中获取到的,也可以是开发或者测试人员输入的模拟访问请求等数据中获取到的。
S202,将目标字符串分词为顺序排列的多个目标词,得到由多个目标词按顺序排列组成的词序列。
其中,将目标字符串分词的方式可以有多种,本申请对于具体分词的方式不加限制。但是为了保证后续可以基于SQL攻击库,分析目标字符串是否属于SQL注入攻击,本申请在对目标字符串进行分词时,需要保证分词出的多个目标词是顺序排布的,各个目标词之间不存在重叠。相应的,该多个目标词在该目标字符串中的位置顺序与该多个目标词在该词序列中的位置顺序相同。
为了便于区分,本申请实施例中,将该目标字符串切分出的各个分词均称为目标词。
可选的,考虑到SQL语言的特殊性,为了提高对包含SQL语句的目标字符串进行分词的合理性,本申请还预先设定的一些分词规则。具体的,可以按照如下一种或者多种分词规则对该目标字符串进行分词:
1)、通过分隔符区分不同字符串中的不同分词。
其中,分隔符可以包括空格、换行以及回车等用于明显分隔两个词的符号。
相应的,可以以分隔符为基准,将分隔符之前的单词与该分隔符之后的单词划分到两个分词中。
举例说明,假设目标字符串为“abc mf”,则由于“abc”与“mf”之间存在空格,则“abc”与“mf”需要划分为不同的分词。
2)、将字符串中的特殊字符确定一个分词。
由于SQL语句中的字符主要是英文字母以及常用的下划线符号编写,因此,可以将26个英文字母大小写和下划线“_”之外的所有字符作为特殊字符,比如,“+”、“-”、“@”等均属于特殊字符。当然,还可以根据需要设定特殊字符。
可以理解的是,由于每个特殊字符是一个分词,因此,如果特殊字符与其他字符之间不存在分隔符,也会将特殊字符与该特殊字符相邻的其他字符拆分,以使得特殊字符以及该特殊字符相邻的其他字符均作为独立的分词。
如,对于字符串“a@b”,由于“@”为特殊字符,则该字符串需要拆分为“a”、“@”以及“b”这三个分词。
可以理解的是,SQL语句中会存在一些注释性内容,而该部分注释性内容仅仅是为了解释SQL语句的含义,而SQL语句中属于对代码解释的代码注释类型的内容可以排除SQL注入,因此,可以不对目标字符串中属于代码注释类型的内容进行分词。相应的,在对该目标字符串分词之前,或者对目标字符串中其他部分分词之后,可以删除目标字符串中属于代码注释类型的内容。比如,SQL语句中会通过两条“/”,又或者通过“//”或者“#”等标识符来标识出SQL语句中注释性的内容,例如,SQL语句中“/a****b/”中两条“/”内的“/a****b/”就属于注释性内容,因此,“/a****b/”就属于代码注释类型的内容,可以删除该部分内容。
为了便于理解对目标字符串的分词,下面结合以上分词规则,对将目标字符串分词为多个顺序排列的目标词进行介绍,如图3所示,其示出了对目标字符串分词的一种实现流程,包括:
步骤S301,将该目标字符串中属于代码注释类型的内容删除;
步骤S302,按照该目标字符串中的分隔符,切分目标字符串中的字符,得到切分出的多个顺序排列的候选分词;
步骤S303,当候选分词中不存在特殊字符时,将候选分词确定为目标词;
步骤S304,当该候选分词中存在特殊字符时,按照每个特殊字符为一个目标分词的原则,切分候选分词中的字符,得到该候选分词切分出的至少一个目标词。
比如:将候选分词“ab“”中不存在特殊字符,则将该候选分词确定为一个目标词。而如果候选分词为前面提到的“a@b”,则需要进一步切分为a、@、b三个目标词。
为了便于理解以上分词过程,举例说明,假设待检测目标字符串为:“/*SQLattack*/a bc def G@h”,按照上述切词方法,先删除代码注释类型的内容:“/*SQLattack*/”。然后,按照分隔符对剩余字符串切分,得到多个顺序排列的候选分词“a”、“bc”、“def”、“G@h”,其中,候选分词“a”、“bc”、“def”中不存在特殊字符,所以将“a”、“bc”、“def”确定为目标词,同时,将存在特殊字符的候选分词“G@h”进一步切分为目标词“G”、“@”和“h”,则切分出的多个目标词按顺序排列组成词序列为:{a、bc、def、G、@、h}。
S203,依据结构化查询语言SQL攻击库中多个攻击词组各自出现的概率,确定该词序列由SQL攻击库中多个攻击词组成的第一概率。
其中,SQL攻击库中的攻击词由多个SQL注入攻击样本分词得到,每个攻击词组由至少一个攻击词构成。
其中,第一概率实际上表征的是组成词序列中的目标词均属于SQL攻击库中攻击词的概率,也就是表征词序列为SQL注入攻击的可能性大小。
其中,该SQL攻击库中每个攻击词组各自出现的概率可以通过对该多个SQL注入攻击样本中包含的攻击词组的出现次数进行统计分析得到。在本申请实施例中,攻击词组库中存储了各个攻击词组以及其对应的概率。
相应的,确定该第一概率时,可以根据该词序列所包含的各个目标词,从SQL注入攻击库中查询由单个该目标词组成的攻击词组或者由多个相邻目标词组成的攻击词组的概率,从而计算出该词序列属于SQL攻击词库的第一概率。
如,在一种可能的情况中,攻击词组包括单个攻击词,在该种情况下,该攻击词组出现的概率可以为该攻击词组中该攻击词在该SQL攻击库中出现的概率。
例如,在攻击词组中包括一个攻击词W的情况下,则该攻击词组出现的概率可以为P(W),其可以通过如下公式一表示:
P(w)=C(w)/C(1) (公式一);
其中,C(w)表示该攻击词w在该多个SQL注入攻击样本中出现的次数,C(1)表示该多个SQL注入攻击样本中分词出的各个攻击词的总数量。
在以上情况中,确定该第一概率时,可以根据该目标字符串对应的词序列所包含的各个目标词,从该SQL攻击库中依次查询出该词序列中各个目标词出现的概率,并将该词序列中各个目标词出现的概率的乘积作为该词序列由该SQL攻击库中多个攻击词构成的第一概率。
在又一种可能的情况中,为了能够更加精准的反映出词序列属于SQL攻击库的可能性大小,攻击词组可以由多个攻击词组成,该攻击词组出现的概率为该攻击词组在该SQL攻击库中出现的条件概率。而该条件概率为攻击词组中最后一个攻击词在该攻击词组中该最后一个攻击词之外的其他攻击词之后出现的概率。
在构建SQL攻击库时,该攻击词组出现的条件概率可以为:统计出的该攻击词组中N个攻击词按顺序组合出现的概率,与统计出的该攻击词组中前N-1个攻击词按顺序出现的概率的比值。其中,N为攻击词组中攻击词的总个数。
如,在攻击词组包括三个攻击词的情况下,该攻击词组的条件概率为该攻击词组中第三个攻击词在该攻击词组中第一个攻击词和第二个攻击词之后出现的概率。
为了便于理解SQL攻击库的构建以及组成,举例说明,假设攻击词组依次包括攻击词wi-2,攻击词wi-1和攻击词wi,则该攻击词组出现的条件概率P(wi|wi-2,wi-1)可以表示为如下:
P(wi|wi-2,wi-1)=P(wi-2,wi-1,wi)/P(wi-2,wi-1) (公式二);
其中,P(wi-2,wi-1)表示攻击词wi-2和攻击词wi-1按顺序组合出现在该多个SQL注入攻击样本中的概率,其可以通过如下公式得到:
P(wi-2,wi-1)=C(wi-2,wi-1)/C(2) (公式三);
其中,C(wi-2,wi-1)表示攻击词wi-2和攻击词wi-1按先后顺序组合出现在该多个SQL注入攻击样本中的次数;
C(2)表示多个SQL注入攻击样本中,任意的两个攻击词按顺序组合出现的总量。例如,假设SQL注入攻击样本分词出的序列为:“ab”、“b”、“f”、“dg”,则在统计C(2)时,需要统计该序列中各个攻击词的先后顺序,任意两个相邻的攻击词组合出现的次数,即,统计“ab”与“b”这两个攻击词按顺序组合出现在多个SQL注入攻击样本的次数,“b”与“f”这两个攻击词按顺序组合出现在多个SQL注入攻击样本的次数,以及“f”与“dg”这两个攻击词按顺序组合出现在多个SQL注入攻击样本的次数。相应的,对于其他SQL注入攻击样本对应的多个攻击词构成的序列中,如果某两个攻击词按顺序组合出现在该多个SQL注入攻击样本的次数尚未统计,则需要进行统计,最终将统计得到的所有次数求和,则求和的结果就是,任意的两个攻击词按顺序组合出现在该SQL注入攻击样本中的总数量。
相应的,P(wi-2,wi-1,wi)表示攻击词wi-2,wi-1,wi按顺序组合出现在该多个SQL注入攻击样本中的概率,P(wi-2,wi-1,wi)可以通过如下公式四得到:
P(wi-2,wi-1,wi)=C(wi-2,wi-1,wi)/C(3), (公式四);
其中,C(wi-2,wi-1,wi)表示攻击词wi-2、攻击词wi-1和攻击词wi按先后顺序组合出现在该多个SQL注入攻击样本中的次数,C(3)表示多个SQL注入攻击样本中,任意的三个攻击词按先后顺序组合出现的总量,C(3)统计过程与前面C(2)相似,在此不再赘述。
当然,对于攻击词组包括四个甚至更多个攻击词的情况,统计该攻击词组出现的条件概率的过程与此类似,在此不再赘述。
可以理解的是,在攻击词组出现的概率为该攻击词组出现的条件概率的情况下,可以按照该词序列中多个目标词以及该多个目标词的排列顺序,依次从该SQL攻击库中查询,由该词序列中相邻的预设数量个目标词所构成的各个分词组出现的条件概率,并基于查询出的条件概率确定该词序列在该SQL攻击库出现的第一条件概率。该第一条件概率表征该词序列由该SQL攻击库中多个攻击词按顺序排列组成的第一概率。
如,将各个分词组出现的条件概率的乘积作为该第一条件概率。
可选的,可以参见图4,其示出了基于词序列中各个目标词的排序顺序,以及SQL攻击库中各个攻击词组出现的条件概率,确定第一条件概率的一种流程示意图,该流程可以包括:
S401,针对词序列中每个目标词,确定由该目标词与该词序列中该目标词之前且紧邻该目标词的至少一个目标词组成目标词组,并根据该SQL攻击库中多个攻击词组各自出现的条件概率,确定该目标词组在该SQL攻击库中出现的条件概率。
如,假设攻击词组由三个攻击词组成,则目标词组也可以是三个攻击词构成,则针对每个目标词,需要将该目标词与该词序列中该目标词之前的两个目标词组成目标词组。然后,查询SQL攻击库中该目标词组相同的攻击词组出现的条件概率,从而得到该目标词组在该SQL攻击库中的条件概率。
特别的,考虑到词序列中排序靠前的目标词之前可能不存在构成目标词组的至少一个目标词,例如,词序列中从前到后的第一个目标词之前不存在其他目标词,在该种情况下,如果目标词之前不存在设定的该至少一个目标词,则可以将该目标词之前的目标词采用表征无目标词的空白字符表示,从而构建出相应的目标词组。
如,仍以攻击词组由三个攻击词构成,并假设词序列由w1、w2直到wi的多个目标词顺序排列组成。
对于wi这一目标词而言,其可以与词序列中wi之前的两个目标词wi-1和wi-2组成一个目标词组,则该目标词组的条件概率实际上就是wi在wi-1和wi-2之后出现的概率P(wi|wi-2,wi-1)。这样,可以从SQL攻击库中查询的该wi在wi-1和wi-2之后出现的条件概率P(wi|wi-2,wi-1),即攻击词组(wi-2,wi-1,wi)对应的条件概率P(wi|wi-2,wi-1),从而得到该目标词组对应的条件概率P(wi|wi-2,wi-1)。
相应的,对于wi之前的目标词wi-1、wi-2直到w3都可以与wi相同的方式,构建相对应的目标词组,并查询目标词组对应的条件概率。
而对于该词序列中排序最靠前的两个目标词w1和w2而言,由于这两个目标词之前的目标词都不足两个,则可以填充空白字符代替目标词。如,w2之前的目标词可以为w1和一个空白字符,该空白字符可以采用padding表示,则目标词w2对应的目标词组为(padding,w1,w2)。相应的,可以从SQL攻击库中攻击词组为(padding,w1,w2)对应的条件概率,即查询w2在w1和padding之后出现的条件概率P(w2|w1,padding)。
相类似的,对于w1,可以构建目标词组(padding,padding,w1),从而可以从SQL攻击库中查询相应的条件概率。
S402,根据该词序列中各个目标词对应的目标词组在该SQL攻击库中出现的条件概率,确定该词序列在该SQL攻击库中出现的第一条件概率。
如,第一条件概率为各个目标词对应的目标词组在SQL攻击库中出现的条件概率的乘积。
举例说明,仍以攻击词组由三个攻击词构成为例说明,并仍假设词序列由从w1、w2到wi的多个目标词组成,则该词序列由SQL攻击库中多个攻击词顺序构成的第一条件概率P(S)可以表示为如下:
P(s)=P(wi|wi-2,wi-1)*P(wi-1|wi-3,wi-2)*…*P(w3|w1,w2)*P(w2|w1,padding)*P(w1|padding,padding) (公式五);
其中,P(wi|wi-2,wi-1)表示目标词wi在目标词wi-1和wi-2之后出现的条件概率,也就是本申请所描述的wi对应的目标词组(wi,wi-1,wi-2)在SQL攻击库中出现的条件概率。其中,P(wi-1|wi-3,wi-2)为wi-1在wi-3,wi-2之后出现的条件概率,即目标词wi-1对应的目标词组(wi-1,wi-2,wi-3)在SQL攻击库中出现的条件概率,相应的,P(w1|padding,padding)、P(w1|padding,padding)的含义可以参见前面的描述。
可以理解的是,在SQL攻击库中可以存储有以上攻击词组出现的条件概率,以及确定攻击词组出现的条件概率的过程中所用到的单个攻击词的概率、两个攻击词按顺序组合出现的概率以及三个攻击词按顺序组合出现的概率等等。
相应的,依据该词序列中目标词的构成以及排序,可以从SQL攻击库中查询相应的出现概率或者出现的条件概率,从而最终确定出该词序列属于SQL攻击库的概率。
然而,在一些情况中,该SQL攻击库中可能会存在未存储该词序列中某个目标词或者由目标词构成的目标词组,这样,在SQL攻击库中无法查询到与单个目标词对应的攻击词组对应的出现概率,以及与目标词组对应的攻击词组出现的概率。在该种情况下,可以将目标词对应的出现概率赋予一个预先设定的目标值。该目标值为不大于零的值,如可以为本领域常规设置的极小值,以避免由于该目标词组的取值为零,而导致词序列在SQL攻击库中出现的概率为零。
当然,对于查询目标词对应的目标词组出现的条件概率的情况,如果SQL攻击库中查询不到该目标词组出现的条件概率,除了将该目标词组出现的条件概率设置为预设的目标值之外,还可以根据SQL攻击库中存储的单个攻击词出现的概率、两个攻击词顺序组合出现的条件概率等等,来确定该目标词组出现的条件概率。
可以理解的是,SQL攻击库可以存储在该服务器中,也可以存储到模型数据库中,对于本申请不加以限制。
S204,当该第一概率满足预设条件时,将该目标字符串识别为SQL注入攻击。
在一种可能的方式中,预设条件可以是:第一概率大于预先设定的概率阈值。该概率阈值为基于多个SQL注入攻击样本以及由该SQL注入攻击样本分词出的多个攻击词所构成的攻击词组在该SQL攻击库中出现的条件概率确定的。
如,可以预先将SQL注入攻击样本分词出的多个攻击词,并统计由至少一个攻击词构成的攻击词组在该SQL攻击库中出现的条件概率,以构成SQL攻击库;然后,基于SQL攻击库统计出的不同攻击词组对应的条件概率,预测各个SQL注入攻击样本属于SQL攻击库的概率,并不断训练调整,直至确定出适合判定所有SQL注入攻击样本属于SQL注入攻击的概率阈值。例如,概率阈值为可以80%。
在又一种可能的实现方式中,为了进一步提高检测SQL注入攻击的精准度,在本申请中除了预先构建了SQL攻击库之外,还可以预先构建正常访问库。该正常访问库中存储有多个正常访问词组各自出现的概率,正常访问库中的正常访问词是由不包含SQL注入攻击的正常访问请求样本分词得到,该正常访问词组由至少一个正常访问词构成。相应的,在执行该步骤S204之前,还可以依据正常访问库中多个正常访问词组各自出现的概率,确定该词序列由该正常访问库中多个正常访问词组成的第二概率。
该第二概率也就是词序列属于正常访问请求或者说属于正常访问库的概率。
其中,正常访问库构成过程与SQL攻击库的构成过程相似,只不过正常访问库是基于正常访问请求样本构建的,关于正常访问库的构成过程将在后面介绍。相应的,基于正常访问库,确定词序列属于该正常访问库的第二概率过程与前面确定第一概率的过程相似,具体可以参见前面的相关介绍。
在确定该第二概率的情况下,该预设条件可以为第一概率大于第二概率。也就是说,当该词序列由SQL攻击库中多个攻击词构成的可能性,大于该词序列由正常访问库中多个正常访问库构成的可能性时,则确认该词序列对应的目标字符串属于SQL注入攻击。
其中,与攻击词组出现的概率相似,正常访问词组出现的概率同样是可以是单个正常访问词构成的访问词组出现的概率,也可以是正常访问词组出现的条件概率。
可见,在本申请实施例中,通过将待检测的目标字符串分词为多个目标词,得到多个目标词顺序排列构建的词序列,并依据该SQL攻击库中多个攻击词组各自出现的概率,便可以确定出词序列由该SQL攻击库中多个攻击词组成的第一概率。而由于SQL注入攻击样本中分词出的攻击词以及组合出的攻击词组可以反映出SQL注入攻击所包含的细节内容,虽然SQL注入攻击的形式存在多样性,但是一些细节内容却是SQL注入攻击必然存在的,而且,即使SQL注入攻击出现新的形式,新形式的SQL注入攻击也必然是包含一些已有攻击词组(细节内容)的组合,因此,通过确定出的第一概率可以更为准确的反映出词序列对应的目标字符串属于SQL注入攻击的可能性大小,从而可以更为准确的检测出该目标字符串属于SQL注入攻击的可能性,有利于降低检测SQL注入攻击的误检率和漏报率,提高检测精准度。
另外,方案无需人工基于SQL注入攻击,人工编写正则表达式,也就避免了由于不同用户编写的正则表达式之间存在冲突,而导致检测SQL注入攻击的误报率较高的情况。
为了便于理解本申请的方案,下面以基于SQL攻击库和正常访问库,来检测目标字符串是否属于SQ注入攻击进行介绍。
为了便于理解,结合图5以及图6对SQL攻击库和正常攻击库的构建方式进行介绍。
如图5示出了构建SQL攻击库和正常访问库的构建原理示意图。图6为基于图5构建SQL攻击库和正常访问库的流程,该流程以SQL攻击库存储有攻击词组出现的条件概率,且正常访问库中存储有正常词组出现的条件概率为例,该流程可以包括:
S601,分别获取多个SQL注入攻击样本和多个正常访问请求样本。
其中,SQL注入攻击样本指的包含SQL注入攻击的访问请求。正常访问请求样本指的是不包含SQL注入攻击的正常访问请求。SQL注入攻击样本和正常访问请求样本都以字符串形式存在。
如,可以通过服务器采集到或者网络中收集到的包含SQL注入攻击的访问请求以及不包含SQL注入攻击的正常访问请求来分别构建SQL注入攻击样本和多个正常访问请求样本。
S602,分别对多个SQL注入攻击样本和多个正常访问请求样本进行分词,以得到多个SQL注入攻击样本对应的多个攻击词序列,以及该多个正常访问请求样本对应的多个正常词序列。
如图5,针对SQL注入攻击样本和正常访问请求样本分别分词,并分别得到待训练(也就是待处理的)的攻击词序列和正常样本序列。
具体的,对于SQL注入攻击样本的分词为:对于每个SQL注入攻击样本,将该SQL注入攻击样本分词为多个攻击词,得到由该多个攻击词按顺序排列的攻击词序列。
对于正常访问请求样本的分词为:针对每个正常访问请求样本,将该正常访问请求样本分词为多个正常词,得到由该多个正常词按顺序排列的正常词序列。
其中,对于SQL注入攻击样本以及该正常访问请求样本的分词方式可以参见前面实施例的相关介绍,在此不再赘述。
S603,确定多个攻击词序列中包含的各个不同攻击词组出现的条件概率,以及多个正常词序列中包含的各个不同正常词组出现的条件概率。
如图5所示,可以设置训练算法,并基于训练算法确定攻击词组以及正常词组各自出现的条件概率。在本实施例中该训练算法可以为机器学习统计算法。
如,对于该多个攻击词序列而言,可以按照如7所示,确定攻击词组在该多个SQL攻击注入样本中出现的条件概率可以包括:
S701,对于每个攻击词序列中的每个攻击词,确定第一攻击词组和第二攻击词组,并统计该多个SQL注入攻击样本中该第一攻击词组出现的统计概率以及该第二攻击词组出现的统计概率。
其中,第一攻击词组由该攻击词,以及,该攻击词序列中该攻击词之前且紧邻该攻击词的预设数量个攻击词组成。
第二攻击词组由攻击词序列中该攻击词之前且紧邻该攻击词的预设数量个攻击词组成。
S702,对于每对第一攻击词组和第二攻击词组,基于该第二攻击词组出现的统计概率以及该第一攻击词组的统计概率,计算第一攻击词组出现的条件概率。
其中,该第一攻击词组出现的条件概率为该第一攻击词组的统计概率与该第二攻击词组出现的统计概率的比值。
其中,该第一攻击词组也就是需要最终确定为SQL攻击库中的攻击词组,且SQL攻击库中会存储该第一攻击词组对应的条件概率。
举例说明,为了便于描述,假设预设数量为3,则第一攻击词组中攻击词个数为3,相当于SQL攻击库中每个攻击词组为一个三元组,即由三个攻击词构成。为了便于介绍,同样假设攻击词序列由w1、w2直到wi的多个攻击词顺序排列组成。
对于wi这一攻击词而言,其可以与攻击词序列中wi之前的两个攻击词wi-1和wi-2组成一个第一攻击词组(wi-2,wi-1,wi),则该第一攻击词组的统计概率就是攻击词wi-2、wi-1和wi按顺序组合出现在该多个SQL注入攻击样本中的概率P(wi-2,wi-1,wi),该P(wi-2,wi-1,wi)的计算公式可以参见前面公式四。
相应的,该wi之前的两个攻击词wi-1和wi-2组成第二攻击词组(wi-2,wi-1),则该第二攻击词组的统计概率就是该攻击词wi-2与wi-1按顺序组合出现的概率P(wi-2,wi-1),该P(wi-2,wi-1)的计算公式可以参见前面公式三。
相应的,该第一攻击词组出现的条件概率为攻击词wi在攻击词wi-1和wi-2之后出现的条件概率P(wi|wi-2,wi-1),该计算公式可以参见公式二。
对于w3到wi的攻击词均可以通过上面的方式,确定第一攻击词组和第二攻击词组的统计概率,以及第一攻击词组的条件概率。而对于该攻击词序列中排序最靠前的两个攻击词w1和w2而言,由于这两个攻击词之前的攻击词都不足两个,则可以填充空白字符代替攻击词,该部分与前面对目标词填充空白字符相似,在此不再赘述。
类似地,通过如下方式确定正常词序列中正常访问词组出现的条件概率:
对于每个正常词序列中的每个正常访问词,确定第一正常访问词组和第二正常访问词组,并统计该多个正常访问请求样本中该第一正常访问词组出现的统计概率以及该第二正常访问词组出现的统计概率;其中,第一正常访问词组是由该正常访问词,以及,该正常词序列中该正常访问词之前且紧邻该正常访问词的预设数量个正常访问词组成的。第二正常访问词组是由正常词序列中该正常访问词之前且紧邻该正常访问词的预设数量个正常访问词组成的。
相应的,对于每对第一正常访问词组和第二正常访问词组,基于该第二正常访问词组出现的统计概率以及该第一正常访问词组的统计概率,计算第一正常访问词组出现的条件概率。
其中,该第一正常访问词组出现的条件概率为该第一正常访问词组的统计概率与该第二正常访问词组出现的统计概率的比值。
正常访问库中会存储各个第一正常访问词组及其条件概率。
S604,将各个该攻击词组的条件概率存储到SQL攻击库中,并将各个正常词组的条件概率存储到正常访问库。
如,SQL攻击库中会存储攻击词组及其条件概率,例如通键与键值的方式存储该攻击词组以及对应的条件概率。
当然,该SQL攻击库还可以存储单个攻击词出现的概率,两个攻击词按顺序组合出现的概率,以及三个攻击词按顺序组合出现的概率等,在此不加以限制。
相应的,正常访问库存储正常访问词组的过程与SQL攻击库相似,在此不再赘述。
由以上SQL攻击库和正常访问库的构建过程可知,本申请为了检测SQL注入攻击,无需构建正则表达式,而是仅需对SQL注入攻击样本以及正常访问请求样本能够分词以及统计,从而避免了编写正则表达式的复杂度。
而且,由于正则表达式编写复杂,如果没有对应的样例,很难理解基于什么原因编写的该正则表达式,从而导致维护正则表达式的复杂度也较高。而本申请中,当SQL攻击库中存在未覆盖的SQL攻击注入相关的攻击词或者攻击词组的信息时,只需要将新增的攻击词组等信息添加到该SQL攻击库即可,维护SQL攻击库的维护难度较低。
为了便于理解,下面以同时包括攻击库和正常访问库为例对本申请实施例的SQL注入攻击检测的方法进行介绍,如图8所示,
S801,获取待检测的目标字符串;
S802,将所述目标字符串分词为顺序排列的多个目标词,得到由多个所述目标词按顺序排列组成的词序列;
将所述目标字符串分词为顺序排列的多个目标词,得到由多个目标词按顺序排列组成的词序列的具体方式可以参见前面实施例的相关介绍,在此不再赘述。
S803,针对词序列中每个目标词,确定由该目标词与该词序列中该目标词之前且紧邻该目标词的至少一个目标词组成目标词组,并根据该SQL攻击库中多个攻击词组各自出现的条件概率,确定该目标词组在该SQL攻击库中出现的条件概率。
S804,根据该词序列中各个目标词对应的目标词组在该SQL攻击库中出现的条件概率,确定该词序列在该SQL攻击库中出现的第一条件概率。
该第一条件概率表征该词序列由该SQL攻击库中多个攻击词按顺序排列组成的第一概率。
该步骤S804和S805可以参见前面的相关介绍,在此处不再赘述。
S805,针对词序列中每个目标词,确定由目标词与词序列中该目标词之前且紧邻该目标词的至少一个目标词组成目标词组,并根据该正常访问库中多个正常访问词组各自出现的概率,确定该目标词组在正常访问库中出现的条件概率。
S806,根据该词序列中各个目标词对应的目标词组在该正常访问库中出现的条件概率,确定该词序列在该正常访问库中出现的第二条件概率。
该第二条件概率表征该词序列由该正常访问库中多个正常访问词按顺序排列组成的第二概率。
该步骤S805和S806的执行过程与前面步骤S803和S804的执行过程相似,具体可以参见本申请关于步骤S804和步骤S805的相关介绍。
可以理解的是,步骤S803和S804,与步骤S805和S806的执行顺序并不限于图8流程的顺序,在实际应用中,也可以先执行步骤S805和S806,在执行步骤S803和S804,也可以在执行步骤S803和S804的同时,执行该步骤S805和S806。
S807,当该第一概率大于该第二概率时,将该目标字符串识别为SQL注入攻击。
结合图8的流程可以看出,在本申请实施例中,检测SQL注入攻击的过程仅仅是基于查询到的条件概率进行简单的数学计算,与基于复杂的正则表达式进行SQL注入攻击的检测相比,通过本申请的方案有利于提高检测性能。
对应本申请的一种SQL注入攻击检测的方法,本申请还提供了一种SQL注入攻击检测的装置。
如,参见图9,其示出了本申请一种SQL注入攻击检测的装置一个实施例的组成结构示意图,该装置可以应用于本申请实施例中所提到的服务器。该装置可以包括:
获取单元901,用于获取待检测的目标字符串;
切词单元902,用于将所述目标字符串分词为顺序排列的多个目标词,得到由所述多个目标词按顺序排列组成的词序列;
第一概率确定单元903,用于依据结构化查询语言SQL攻击库中多个攻击词组各自出现的概率,确定所述词序列由所述SQL攻击库中多个攻击词组成的第一概率,所述SQL攻击库中的攻击词由多个SQL注入攻击样本分词得到,所述攻击词组由至少一个攻击词构成;
识别单元904,用于当所述第一概率满足预设条件时,将所述目标字符串识别为SQL注入攻击。
在一种可能的实现方式中,所述第一概率确定单元中攻击词组出现的概率包括:攻击词组出现的条件概率,所述攻击词组出现的条件概率为所述攻击词组中最后一个攻击词在所述攻击词组中所述最后一个攻击词之外的其他攻击词之后出现的概率;
所述第一概率确定单元903具体包括:
第一词概率确定子单元,用于针对词序列中每个目标词,确定由所述目标词与所述词序列中所述目标词之前且紧邻所述目标词的至少一个目标词组成目标词组,并根据所述SQL攻击库中多个攻击词组各自出现的条件概率,确定所述目标词在所述SQL攻击库中出现的条件概率;
第一序列概率确定子单元,用于根据所述词序列中各个目标词在所述SQL攻击库中出现的条件概率,确定所述词序列在所述SQL攻击库中出现的第一条件概率,所述第一条件概率表征所述词序列由所述SQL攻击库中多个攻击词按顺序排列组成的第一概率。
在又一种可能的实现方式中,所述装置还包括:
第二概率确定单元,用于依据正常访问库中多个正常访问词组出现的概率,确定所述词序列由所述正常访问库中多个正常访问词组成的第二概率,所述正常访问库中的正常访问词是由不包含SQL注入攻击的正常访问请求样本分词得到,所述正常访问词组由至少一个正常访问词构成;
相应地,所述识别单元具体用于,当所述第一概率大于所述第二概率时,将所述目标字符串识别为SQL注入攻击。
可选的,在所述第一概率确定单元中所述攻击词组出现的概率包括攻击词组出现的条件概率的情况下,所述第二概率确定单元中所述正常访问词组出现的概率,包括:正常访问词组出现的条件概率;
所述第二概率确定单元,包括:
第二词概率确定子单元,用于针对词序列中每个目标词,确定由所述目标词与所述词序列中所述目标词之前且紧邻所述目标词的至少一个目标词组成目标词组,并根据所述正常访问库中多个正常访问词组出现的概率,确定所述目标词组在所述正常访问库中出现的条件概率;
第二序列概率确定子单元,用于根据所述词序列中各个目标词对应的目标词组在所述正常访问库中出现的条件概率,确定所述词序列在所述正常访问库中出现的第二条件概率,所述第二条件概率表征所述词序列由所述正常访问库中多个正常访问词按顺序排列组成的第二概率。
在又一种可能的实现方式中,所述识别单元904具体用于,当所述第一概率大于预先设定的概率阈值时,将所述目标字符串识别为SQL注入攻击,所述概率阈值为基于所述多个SQL注入攻击样本以及由所述SQL注入攻击样本分词出的多个攻击词所构成的攻击词组在所述SQL攻击库中出现的条件概率确定的。
在又一种可能的实现方式中,切词单元902具体包括:
删除子单元,用于将所述目标字符串中属于代码注释类型的内容删除;
确定候选分词子单元,用于按照所述目标字符串中的分隔符,切分所述目标字符串中的字符,得到切分出的多个顺序排列的候选分词;
确定目标词子单元,用于当所述候选分词中不存在特殊字符时,将所述候选分词确定为目标词;当所述候选分词中存在特殊字符时,按照每个特殊字符为一个目标分词的原则,切分所述候选分词中的字符,得到所述候选分词切分出的至少一个目标词。
在又一种可能的实现方式中,所述装置还包括:
条件概率统计单元,用于通过如下方式确定所述SQL攻击库中攻击词组出现的条件概率:
对于每个SQL注入攻击样本,将所述SQL注入攻击样本分词为多个攻击词,得到由所述多个攻击词按顺序排列的攻击词序列;
对于每个攻击词序列中的每个攻击词,确定第一攻击词组和第二攻击词组,并统计所述多个SQL注入攻击样本中所述第一攻击词组出现的统计概率以及所述第二攻击词组出现的统计概率;该第一攻击词组由所述攻击词,以及,所述攻击词序列中所述攻击词之前且紧邻所述攻击词的预设数量个攻击词组成;该第二攻击词组由攻击词序列中该攻击词之前且紧邻该攻击词的预设数量个攻击词组成;
对于每对第一攻击词组和第二攻击词组,基于所述第二攻击词组出现的统计概率以及所述第一攻击词组的统计概率,计算所述第一攻击词组出现的条件概率,并将所述第一攻击词组出现的条件概率存储为SQL攻击库中攻击词组出现的条件概率。
又一方面,本申请还提供了一种服务器。如,参见图10,其示出了本申请实施例的服务器的一种组成示意图;如图10,服务器1000可以包括:处理器1001和存储器1002。
在本申请实施例中,该处理器1001,可以为中央处理器(Central ProcessingUnit,CPU),特定应用集成电路,数字信号处理器或者其他可编程逻辑器件等。
该处理器可以调用存储器1002中存储的程序,具体的,可以处理器可以执行以上图2-图8的实施例中所执行的操作。
存储器1002中用于存放一个或者一个以上程序,程序可以包括程序代码,所述程序代码包括计算机操作指令,在本申请实施例中,该存储器中至少存储有用于实现以下功能的程序:
获取待检测的目标字符串;
将所述目标字符串分词为顺序排列的多个目标词,得到由所述多个目标词按顺序排列组成的词序列;
依据结构化查询语言SQL攻击库中多个攻击词组各自出现的概率,确定所述词序列由所述SQL攻击库中多个攻击词组成的第一概率,所述SQL攻击库中的攻击词由多个SQL注入攻击样本分词得到,所述攻击词组由至少一个攻击词构成;
当所述第一概率满足预设条件时,将所述目标字符串识别为SQL注入攻击。
在一种可能的实现方式中,该存储器1002可包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、以及至少一个功能(比如图像播放功能等)所需的应用程序等;存储数据区可存储根据服务器的使用过程中所创建的数据,比如,用户数据及音频数据等等。
此外,存储器1002可以包括高速随机存取存储器,还可以包括非易失性存储器。
该服务器还可以包括:通信接口1003、输入单元1004和显示器1005和通信总线1006。其中,处理器1001、存储器1002、通信接口1003、输入单元1004、显示器1005、均通过通信总线1006完成相互间的通信。
其中,该显示器1004包括显示面板,如触摸显示面板等;该输入单元可以触摸感应单元、键盘等等。
当然,图10所示的服务器结构并不构成对本申请实施例中服务器的限定,在实际应用中服务器可以包括比图10所示的更多或更少的部件,或者组合某些部件。
另一方面,本申请还提供了一种存储介质,该存储介质中存储有计算机程序,所述计算机程序被处理器加载并执行时,实现如上任意一个实施例中所描述的SQL注入攻击检测的方法。
需要说明的是,本说明书中的各个实施例均采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似的部分互相参见即可。对于装置类实施例而言,由于其与方法实施例基本相似,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
最后,还需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括要素的过程、方法、物品或者设备中还存在另外的相同要素。
对所公开的实施例的上述说明,使本领域技术人员能够实现或使用本发明。对这些实施例的多种修改对本领域技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本发明的精神或范围的情况下,在其它实施例中实现。因此,本发明将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。
以上仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。
Claims (7)
1.一种结构化查询语言注入攻击检测方法,其特征在于,包括:
获取待检测的目标字符串;
将所述目标字符串分词为顺序排列的多个目标词,得到由所述多个目标词按顺序排列组成的词序列;
针对词序列中每个目标词,确定由所述目标词与所述词序列中所述目标词之前且紧邻所述目标词的至少一个目标词组成目标词组,并根据结构化查询语言SQL攻击库中多个攻击词组各自出现的条件概率,确定所述目标词组在所述SQL攻击库中出现的条件概率,所述SQL攻击库中的攻击词由多个SQL注入攻击样本分词得到,所述攻击词组由至少一个攻击词构成;
根据所述词序列中各个目标词对应的目标词组在所述SQL攻击库中出现的条件概率,确定所述词序列在所述SQL攻击库中出现的第一条件概率,所述第一条件概率为各个目标词对应的目标词组在SQL攻击库中出现的条件概率的乘积,所述第一条件概率表征所述词序列由所述SQL攻击库中多个攻击词按顺序排列组成的第一概率,其中,将统计出的该攻击词组中N个攻击词按顺序组合出现的概率,与统计出的该攻击词组中前N-1个攻击词按顺序出现的概率的比值,作为攻击词组在所述SQL攻击库中出现的条件概率,其中,N为由多个相邻目标词组成的攻击词组中攻击词的总个数;
针对词序列中每个目标词,确定由所述目标词与所述词序列中所述目标词之前且紧邻所述目标词的至少一个目标词组成目标词组,并根据正常访问库中多个正常访问词组各自出现的概率,确定所述目标词组在所述正常访问库中出现的条件概率,所述正常访问库中的正常访问词是由不包含SQL注入攻击的正常访问请求样本分词得到;
根据所述词序列中各个目标词对应的目标词组在所述正常访问库中出现的条件概率,确定所述词序列在所述正常访问库中出现的第二条件概率,所述第二条件概率表征该词序列由所述正常访问库中多个正常访问词按顺序排列组成的第二概率;
当所述第一概率大于所述第二概率时,将所述目标字符串识别为SQL注入攻击。
2.根据权利要求1所述的方法,其特征在于,所述方法还包括:
所述第一概率大于预先设定的概率阈值,所述概率阈值为基于所述多个SQL注入攻击样本以及由所述SQL注入攻击样本分词出的多个攻击词所构成的攻击词组各自在所述SQL攻击库中出现的条件概率确定的。
3.根据权利要求1所述的方法,其特征在于,按照如下方式对所述目标字符串分词:
将所述目标字符串中属于代码注释类型的内容删除;
按照所述目标字符串中的分隔符,切分所述目标字符串中的字符,得到切分出的多个顺序排列的候选分词;
当所述候选分词中不存在特殊字符时,将所述候选分词确定为目标词;
当所述候选分词中存在特殊字符时,按照每个特殊字符为一个目标分词的原则,切分所述候选分词中的字符,得到所述候选分词切分出的至少一个目标词。
4.根据权利要求1所述的方法,其特征在于,所述SQL攻击库中攻击词组出现的条件概率通过如下方式确定:
对于每个SQL注入攻击样本,将所述SQL注入攻击样本分词为多个攻击词,得到由所述多个攻击词按顺序排列的攻击词序列;
对于每个攻击词序列中的每个攻击词,确定第一攻击词组和第二攻击词组,并统计所述多个SQL注入攻击样本中所述第一攻击词组出现的统计概率以及所述第二攻击词组出现的统计概率,所述第一攻击词组由所述攻击词,以及,所述攻击词序列中所述攻击词之前且紧邻所述攻击词的预设数量个攻击词组成的;所述第二攻击词组由所述攻击词序列中所述攻击词之前且紧邻所述攻击词的预设数量个攻击词组成的;
对于每对第一攻击词组和第二攻击词组,基于所述第二攻击词组出现的统计概率以及所述第一攻击词组的统计概率,计算所述第一攻击词组出现的条件概率,并将所述第一攻击词组出现的条件概率存储为SQL攻击库中攻击词组出现的条件概率。
5.一种结构化查询语言注入攻击检测装置,其特征在于,包括:
获取单元,用于获取待检测的目标字符串;
切词单元,用于将所述目标字符串分词为顺序排列的多个目标词,得到由所述多个目标词按顺序排列组成的词序列;
第一概率确定单元,用于针对词序列中每个目标词,确定由所述目标词与所述词序列中所述目标词之前且紧邻所述目标词的至少一个目标词组成目标词组,并根据结构化查询语言SQL攻击库中多个攻击词组各自出现的条件概率,确定所述目标词组在所述SQL攻击库中出现的条件概率,所述SQL攻击库中的攻击词由多个SQL注入攻击样本分词得到,所述攻击词组由至少一个攻击词构成;根据所述词序列中各个目标词对应的目标词组在所述SQL攻击库中出现的条件概率,确定所述词序列在所述SQL攻击库中出现的第一条件概率,所述第一条件概率为各个目标词对应的目标词组在SQL攻击库中出现的条件概率的乘积,所述第一条件概率表征所述词序列由所述SQL攻击库中多个攻击词按顺序排列组成的第一概率,其中,将统计出的该攻击词组中N个攻击词按顺序组合出现的概率,与统计出的该攻击词组中前N-1个攻击词按顺序出现的概率的比值,作为攻击词组在所述SQL攻击库中出现的条件概率,其中,N为由多个相邻目标词组成的攻击词组中攻击词的总个数;
第二概率确定单元,用于针对词序列中每个目标词,确定由所述目标词与所述词序列中所述目标词之前且紧邻所述目标词的至少一个目标词组成目标词组,并根据正常访问库中多个正常访问词组各自出现的概率,确定所述目标词组在所述正常访问库中出现的条件概率,所述正常访问库中的正常访问词是由不包含SQL注入攻击的正常访问请求样本分词得到;根据所述词序列中各个目标词对应的目标词组在所述正常访问库中出现的条件概率,确定所述词序列在所述正常访问库中出现的第二条件概率,所述第二条件概率表征该词序列由所述正常访问库中多个正常访问词按顺序排列组成的第二概率;
识别单元,用于当所述第一概率大于所述第二概率时,将所述目标字符串识别为SQL注入攻击。
6.一种服务器,其特征在于,包括:处理器和存储器;
其中,所述处理器用于执行所述存储器中存储的程序;
所述存储器用于存储程序,所述程序至少用于:
获取待检测的目标字符串;
将所述目标字符串分词为顺序排列的多个目标词,得到由所述多个目标词按顺序排列组成的词序列;
针对词序列中每个目标词,确定由所述目标词与所述词序列中所述目标词之前且紧邻所述目标词的至少一个目标词组成目标词组,并根据结构化查询语言SQL攻击库中多个攻击词组各自出现的条件概率,确定所述目标词组在所述SQL攻击库中出现的条件概率,所述SQL攻击库中的攻击词由多个SQL注入攻击样本分词得到,所述攻击词组由至少一个攻击词构成;
根据所述词序列中各个目标词对应的目标词组在所述SQL攻击库中出现的条件概率,确定所述词序列在所述SQL攻击库中出现的第一条件概率,所述第一条件概率为各个目标词对应的目标词组在SQL攻击库中出现的条件概率的乘积,所述第一条件概率表征所述词序列由所述SQL攻击库中多个攻击词按顺序排列组成的第一概率,其中,将统计出的该攻击词组中N个攻击词按顺序组合出现的概率,与统计出的该攻击词组中前N-1个攻击词按顺序出现的概率的比值,作为攻击词组在所述SQL攻击库中出现的条件概率,其中,N为由多个相邻目标词组成的攻击词组中攻击词的总个数;
针对词序列中每个目标词,确定由所述目标词与所述词序列中所述目标词之前且紧邻所述目标词的至少一个目标词组成目标词组,并根据正常访问库中多个正常访问词组各自出现的概率,确定所述目标词组在所述正常访问库中出现的条件概率,所述正常访问库中的正常访问词是由不包含SQL注入攻击的正常访问请求样本分词得到;
根据所述词序列中各个目标词对应的目标词组在所述正常访问库中出现的条件概率,确定所述词序列在所述正常访问库中出现的第二条件概率,所述第二条件概率表征该词序列由所述正常访问库中多个正常访问词按顺序排列组成的第二概率;
当所述第一概率大于所述第二概率时,将所述目标字符串识别为SQL注入攻击。
7.一种计算机可读存储介质,其特征在于,所述存储介质中存储有计算机程序,所述计算机程序用于执行权利要求1-4任一项所述的结构化查询语言注入攻击检测方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811014228.0A CN109150886B (zh) | 2018-08-31 | 2018-08-31 | 结构化查询语言注入攻击检测方法及相关设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811014228.0A CN109150886B (zh) | 2018-08-31 | 2018-08-31 | 结构化查询语言注入攻击检测方法及相关设备 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN109150886A CN109150886A (zh) | 2019-01-04 |
CN109150886B true CN109150886B (zh) | 2021-07-27 |
Family
ID=64825937
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201811014228.0A Active CN109150886B (zh) | 2018-08-31 | 2018-08-31 | 结构化查询语言注入攻击检测方法及相关设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109150886B (zh) |
Families Citing this family (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112232076A (zh) * | 2019-06-26 | 2021-01-15 | 腾讯科技(深圳)有限公司 | 脚本处理方法、装置及电子设备 |
US11934393B2 (en) | 2021-01-12 | 2024-03-19 | Sap Se | Input validation API using machine learning and database input validation framework |
CN112966507A (zh) * | 2021-03-29 | 2021-06-15 | 北京金山云网络技术有限公司 | 构建识别模型及攻击识别方法、装置、设备及存储介质 |
CN114500053B (zh) * | 2022-01-27 | 2023-12-05 | 安徽华云安科技有限公司 | 一种代码注入检测方法、装置、电子设备及可读存储介质 |
Family Cites Families (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN100592692C (zh) * | 2007-09-27 | 2010-02-24 | 南京大学 | 基于条件互信息的双层半懒惰贝叶斯的网络入侵分类方法 |
CN101350745B (zh) * | 2008-08-15 | 2011-08-03 | 北京启明星辰信息技术股份有限公司 | 一种入侵检测方法及装置 |
CN104836781B (zh) * | 2014-02-20 | 2018-11-09 | 腾讯科技(北京)有限公司 | 区分访问用户身份的方法及装置 |
WO2016186975A1 (en) * | 2015-05-15 | 2016-11-24 | Virsec Systems, Inc. | Detection of sql injection attacks |
CN105187408A (zh) * | 2015-08-17 | 2015-12-23 | 北京神州绿盟信息安全科技股份有限公司 | 网络攻击检测方法和设备 |
-
2018
- 2018-08-31 CN CN201811014228.0A patent/CN109150886B/zh active Active
Non-Patent Citations (1)
Title |
---|
"概率论与数理统计";王刈禾;《读秀》;20171231;第17页 * |
Also Published As
Publication number | Publication date |
---|---|
CN109150886A (zh) | 2019-01-04 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109150886B (zh) | 结构化查询语言注入攻击检测方法及相关设备 | |
US11604797B2 (en) | Inferring joins for data sets | |
CN108319630B (zh) | 信息处理方法、装置、存储介质和计算机设备 | |
CN105518661B (zh) | 经由挖掘的超链接文本的片段来浏览图像 | |
JP5379138B2 (ja) | 領域辞書の作成 | |
CN110096573B (zh) | 一种文本解析方法及装置 | |
US8386238B2 (en) | Systems and methods for evaluating a sequence of characters | |
CN110909531B (zh) | 信息安全的甄别方法、装置、设备及存储介质 | |
US9317606B1 (en) | Spell correcting long queries | |
CN111090860A (zh) | 一种基于深度学习的代码漏洞检测方法及装置 | |
CN109492118A (zh) | 一种数据检测方法及检测装置 | |
CN113204953A (zh) | 基于语义识别的文本匹配方法、设备及设备可读存储介质 | |
CN106897016A (zh) | 一种基于触摸屏终端的搜索方法、装置及触摸屏终端 | |
CN112532624A (zh) | 一种黑链检测方法、装置、电子设备及可读存储介质 | |
CN115004181A (zh) | 网页检测方法、装置、电子设备以及存储介质 | |
CN107111607A (zh) | 用于语言检测的系统和方法 | |
US10878189B2 (en) | Method for correcting a mistyped word resulting from at least one of an inaccurate keyboard input and a wrong keyboard layout and system implementing thereof | |
CN104076945B (zh) | 用于在终端中显示输入键盘的装置和方法 | |
CN110580337A (zh) | 一种基于实体相似度计算的专业实体消歧实现方法 | |
CN112613176A (zh) | 慢sql语句预测方法及系统 | |
Annamalai et al. | Accessing the data efficiently using prediction of dynamic data algorithm | |
CN109933775B (zh) | Ugc内容处理方法及装置 | |
CN112579937A (zh) | 一种字符的高亮显示方法及装置 | |
CN115186647A (zh) | 文本相似度的检测方法、装置、电子设备及存储介质 | |
CN106709294B (zh) | 一种用户认证方法和装置 |
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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |