基于web应用防护系统的sql注入漏洞检测方法、装置、终端及介质
技术领域
1.本发明涉及web应用防护领域,尤其涉及基于web应用防护系统的sql注入漏洞检测方法、装置、终端及介质。
背景技术:
2.web应用防护系统,也被称为网站应用级入侵防御系统,其英文全程为web application firewall,简称为waf,利用国际上公认的一种说法:web应用防火墙是通过执行一系列针对http/https的安全策略来专门为web应用提供保护的一款产品。
3.sql注入即是指web应用程序对用户输入数据的合法性没有判断或过滤不严,攻击者可以在web应用程序中事先定义好的查询语句的结尾上添加额外的sql语句,在管理员不知情的情况下实现非法操作,以此来实现欺骗数据库服务器执行非授权的任意查询,从而进一步得到相应的数据信息。
4.waf通过在请求包中匹配正则表达式来拦截sql注入的攻击请求,但是sql语法灵活多变,数据库类型众多,如果对这些灵活多变的请求使用严格的规则进行匹配,可能会导致一些业务正常请求被误拦,因此,常见场景下往往使用一些不容易误拦正常请求的正则匹配规则拦截sql注入攻击,也因此,部分sql注入攻击的请求因为规则不够严格而被放过。
5.因此,本领域的技术人员致力于开发一种增强waf拦截sql注入攻击的能力的技术解决方案。
技术实现要素:
6.有鉴于现有技术的上述缺陷,本发明提供基于web应用防护系统的sql注入漏洞检测方法、装置、终端及介质,用于解决的技术问题是如何增强waf拦截sql注入攻击的能力。
7.为实现上述目的,本发明提供了一种基于web应用防护系统的sql注入漏洞检测方法,包括:接收sql注入请求,对所述sql注入请求的响应内容进行预处理,得到对应的当前请求返回包;提取所述当前请求返回包与标准请求返回包的最长公共子序列;计算所述最长公共子序列在所述当前请求返回包中的报文长度占比值,并将所述长度占比值与预设占比阈值做比较;若所述长度占比值达到所述预设占比阈值,则放过所述sql注入请求;否则,对所述sql注入请求进行正则匹配,并根据匹配结果进行拦截或放过处理。
8.在本发明的较佳实施方式中,所述对所述sql注入请求的响应内容进行预处理,包括:对所述响应内容中的嵌套键值按字母顺序排列,并当所述嵌套键值的内容为列表时仅保留列表最长值,以形成树形结构。
9.在本发明的另一较佳实施方式中,所述标准请求返回包为:在对经过所述web应用防护系统的http/s流量进行去重后,统计到的频次最高的响应报文长度所对应的请求返回包。
10.在本发明的另一较佳实施方式中,所述标准请求返回包的获取过程包括:采集经
过所述web应用防护系统的http/s流量;对所述http/s流量按url和参数键值进行去重;统计去重后各请求返回包的响应报文长度,选出频次最高的响应报文长度所对应的请求返回包;对选出的所述请求返回包进行预处理以得到所述标准请求返回包。
11.在本发明的另一较佳实施方式中,所述长度占比值为所述最长公共子序列的报文长度与所述当前请求返回包的报文长度之比。
12.在本发明的另一较佳实施方式中,所述对所述sql注入请求进行正则匹配,并根据匹配结果进行拦截或放过处理包括:按照正则匹配规则对所述sql注入请求进行正则匹配;若匹配成功,则拦截所述sql注入请求;否则,放过所述sql注入请求。
13.为实现上述目的,本发明还提供一种基于web应用防护系统的sql注入漏洞检测装置,其特征在于,包括:预处理模块,用于接收sql注入请求,对所述sql注入请求的响应内容进行预处理,得到对应的当前请求返回包;最长公共子序列提取模块,用于提取所述当前请求返回包与标准请求返回包的最长公共子序列;注入请求处理模块,用于计算所述最长公共子序列在所述当前请求返回包中的报文长度占比值,并将所述长度占比值与预设占比阈值做比较;若所述长度占比值达到所述预设占比阈值,则放过所述sql注入请求;否则,对所述sql注入请求进行正则匹配,并根据匹配结果进行拦截或放过处理。
14.在本发明的较佳实施方式中,所述装置还包括标准请求返回包构建模块,用于构建所述标准请求返回包;其中,所述标准请求返回包构建模块的构建过程包括:采集经过所述web应用防护系统的http/s流量;对所述http/s流量按url和参数键值进行去重;统计去重后各请求返回包的响应报文长度,选出频次最高的响应报文长度所对应的请求返回包;对选出的所述请求返回包进行预处理以得到所述标准请求返回包。
15.为实现上述目的及其他相关目的,本技术还提供一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现所述基于web应用防护系统的sql注入漏洞检测方法。
16.为实现上述目的及其他相关目的,本技术的第四方面提供一种sql注入漏洞检测终端,包括:处理器及存储器;所述存储器用于存储计算机程序,所述处理器用于执行所述存储器存储的计算机程序,以使所述终端执行所述基于web应用防护系统的sql注入漏洞检测方法。
17.本发明提供的基于web应用防护系统的sql注入漏洞检测方法、装置、终端及介质具有以下技术效果:本发明将最长公共子序列的算法的使用方式进行改进,对请求响应内容进行数据结构预处理,基于日常流经waf的流量统计出一标准请求返回包,根据最长公共子序列算法提取当前请求返回包与标准请求返回包的最长公共子序列,再计算最长公共子序列在当前请求返回包中的报文长度占比值,通过判断该占比值与预设阈值的比较来确定是放行还是拦截该sql注入请求,因此可通过对正常请求收集和预处理等方式增强waf拦截sql注入攻击的能力。
18.以下将结合附图对本发明的构思、具体结构及产生的技术效果作进一步说明,以充分地了解本发明的目的、特征和效果。
附图说明
19.图1显示为本发明在一实施例中的基于web应用防护系统的sql注入漏洞检测方法
的流程示意图。
20.图2a显示为本发明一实施例中公共子序列的示意图。
21.图2b显示为本发明一实施例中公共子串的示意图。
22.图2c显示为本发明一实施例中最长公共子序列的示意图。
23.图3显示为本发明一实施例中标准请求返回包的获取过程示意图。
24.图4显示为本发明一实施例中基于web应用防护系统的sql注入漏洞检测装置的结构示意图。
25.图5显示为本发明一实施例中sql注入漏洞检测终端的结构示意图。
具体实施方式
26.以下通过特定的具体实例说明本发明的实施方式,本领域技术人员可由本说明书所揭露的内容轻易地了解本发明的其他优点与功效。本发明还可以通过另外不同的具体实施方式加以实施或应用,本说明书中的各项细节也可以基于不同观点与应用,在没有背离本发明的精神下进行各种修饰或改变。需说明的是,在不冲突的情况下,以下实施例及实施例中的特征可以相互组合。
27.需要说明的是,以下实施例中所提供的图示仅以示意方式说明本发明的基本构想,遂图示中仅显示与本发明中有关的组件而非按照实际实施时的组件数目、形状及尺寸绘制,其实际实施时各组件的型态、数量及比例可为一种随意的改变,且其组件布局型态也可能更为复杂。
28.为了阐释的目的而描述了本发明的一些示例性实施例,需要理解的是,本发明可通过附图中没有具体示出的其他方式来实现。
29.如图1所示,展示了本发明在一实施例中的基于web应用防护系统的sql注入漏洞检测方法的流程示意图。所述web应用防护系统也被称为网站应用级入侵防御系统,其简称为waf,本领域技术人员应理解的是,下文中所涉及到的web应用防护系统和waf实际上指代的是同样的意思。
30.示例性的,所述web应用防护系统可以是硬件设备、软件产品或基于云的waf。其中,硬件设备的waf以独立硬件设备的形态存在,支持以多种方式(如透明桥接模式、旁路模式、反向代理等)部署到网络中为后端的web应用提供安全防护。软件产品的waf采用纯软件的方式实现,例如modsecurity、naxsi、网站安全狗等,以软件产品的形态存在,具有安装简单、容易使用、成本低等优势。基于云的waf将受保护的web服务器建立虚拟主机,对每一个虚拟主机提供相应的安全策略来进行保护,同时把web应用防火墙配置为反向代理服务器,用于代理web服务器对外部网络的连接请求;当web应用防火墙能够代理外部网络上的主机访问内部web服务器时,web应用防火墙对外就表现为一个web服务器;它负责把外部网络上的请求转发给内部的应用服务器,然后再把内部响应的数据返回给外部网络;web应用防火墙没有保存任何内部服务器的真实数据,所有静态网页或者cgi程序都保存在内部的web服务器上;因此对web应用防火墙的攻击并不会使网页信息遭到破坏,由此增强了web服务器的安全性。
31.在本实施例中,所述基于web应用防护系统的sql注入漏洞检测方法主要包括步骤s11~s14,下文将对各步骤的执行过程及原理做进一步的解释说明。
32.步骤s11:接收sql注入请求,对所述sql注入请求的响应内容进行预处理,得到对应的当前请求返回包。
33.应理解的是,sql注入请求是指web应用程序对用户输入数据的合法性没有判断或者过滤不严,致使攻击者可以在web应用程序中事先定义好的查询语句的末尾添加额外的sql语句,并在管理员不知情的情况下执行非法操作,以此来欺骗数据库服务器,从而执行非法授权的任意查询以获取到相应的数据信息。
34.示例性的,sql注入请求的注入方式包括但不仅限于get型注入请求、post型注入请求、cookie型注入请求或http型注入请求等。get型注入请求常见的注入格式为”id=xxx”等,后面携带的参数提交方式为get型,例如:get/sql/less=2/?id=1;post型注入请求的格式例如:post/sql/less=11/?id=1;cookie型注入请求与get型或post型注入请求类似,但提交参数用的是cookie方式,例如:cookie:uname=admin;http型注入请求的参数包括但不限于user-agent、cookie、x-forwarded-for、client-ip、rerferer、host等,例如:user-agent:mozilla or updatexml(1,concat(0x7e,database()),0)等。
35.在一些可选的示例中,对所述sql注入请求的响应内容所进行的数据结构预处理,具体包括:对所述请求响应内容中的嵌套键值按字母顺序排列,并当值为列表时仅保留列表最长值,以形成树形结构。
36.目前,从服务器端接收的数据必须以浏览器能够理解的格式来发送,服务器端的编程语言只能以如下3种格式返回数据:json数据格式、xml数据格式和html数据格式。其中:json数据格式是javascript原生格式,即在javascript中处理json数据时不需要任何特殊的api或者工具包;json的规则例如:对象是一个无序的“名称/值”对集合,一个对象以“{”开始,以“}”结束,每一个名称后面跟一个“:”,名称/值之间用逗号分隔开。xml语言是一种允许用户对自己的标记语言进行定义的源语言;xml本身并不被计算机识别并运行,只能依靠另一种语言来解释它,是独立于软件和硬件的信息传输工具。html语言是一种超文本标记语言,超文本是指页面内可以包含图片、链接,甚至音乐、程序等非文字元素,标记是指计算机所能理解的信息符号,通过此种标记,计算机之间可以处理包含各种信息的文章等。
37.为便于理解,下文以json数据格式为例来说明数据结构预处理的过程及原理,即以json为例,所有的嵌套键值按字母顺序排列,值为列表时留下列表最长值而将其余删除;在此基础上,html/xml格式也可做类似树形结构处理。
38.在进行预处理前,sql注入请求的响应内容为:
39.{
40."c":[
[0041]
"rj131-115577",
[0042]
"rj131-115577",
[0043]
"rj131-115577",
[0044]
"rj131-115577",
[0045]
"rj131-115577",
[0046]
"rj131-115577",
[0047]
"rj131-115577",
[0048]
"rj131-115577",
[0049]
"rj131-115577",
[0050]
"rj131-115577",
[0051]
"rj131-115577",
[0052]
"rj131-115577"
[0053]
],
[0054]
"a":"123",
[0055]
"b":"123"
[0056]
}
[0057]
需说明的是,在对所述sql注入请求的响应内容进行预处理之前,嵌套键值并未按字母顺序排列,其顺序为“c-a-b”。另外,嵌套键值c的值为列表,即有多行“rj131-115577”,因此仅保留列表最长值而将其余删除,最终在预处理后得到如下的树形结构:
[0058]
{
[0059]
"a":"123",
[0060]
"b":"123",
[0061]
"c":[
[0062]
"rj131-115577"
[0063]
]
[0064]
}
[0065]
步骤s12:提取所述当前请求返回包与标准请求返回包的最长公共子序列。
[0066]
于本实施例中,采用最长公共子序列算法来提取最长公共子序列。所述最长公共子序列算法是一种基于给定的两个字符串,求取这两个字符串最长的公共子序列的一种算法。最长公共子序列算法通常用于黑盒扫描器中,用来通过比对正常请求和恶意请求的区别来发现sql注入攻击,按原理可以很好弥补正则规则不够严格而被放过的问题,但是waf和扫描器的部署环境和能力不同,扫描器的正常请求和恶意请求完全由扫描器程序自己确定,自行发出,不存在意外性,所以可以做到比较好的漏洞检测,然而waf是部署在web应用服务边界的程序,即使相同接口,因为服务器数据库内容的变化都由可能导致和正常请求的匹配内容不同,从而导致长公共子序列算法计算结果不同,将正常请求误认为是恶意请求,因此最长公共子序列算法往往不在waf中进行使用。
[0067]
需说明的是,最长公共子序列(longest common sequence)是指一个给定序列的子序列,是将给定序列中零个或多个元素去掉之后得到的结果。应理解的是,最长公共子序列和最长公共子串是两个不同的概念,子串是指给定串中任意个连续的字符组成的子序列。
[0068]
为便于理解,现结合图2a~2c进行相应的解释说明:
[0069]
图2a展示的是公共子序列的示意图,给定序列为{a,b,c,d,e,f,g,h},该给定序列的子序列示例为{a,c,e,f},也即元素b,d,f,h被去掉后保持原有的元素序列所得到的结果就是子序列;该给定序列的子序列并不仅限于此,例如{a,h},{c,d,e}等也都是该给定序列的子序列。
[0070]
图2b展示的是公共子串的示意图,给定序列同样为{a,b,c,d,e,f,g,h},该给定序列的子串示例为{c,d,e,f},也即元素a,b,g,h被去掉后保持原有且连续的元素序列所得到
的结果就是子串;该给定序列的子串并不仅限于此,例如{a,b,c,d},{g,h}等也都是该给定序列的子串。
[0071]
图2c展示的是最长公共子序列的示意图。给定序列s1为{1,3,4,5,6,7,7,8},给定序列s2为{3,5,7,48,6,7,8,2},序列s1和s2的相同子序列被称为公共子序列,所有公共子序列中长度最长的即为最长公共子序列,即{3,4,6,7,8}。
[0072]
于本实施例中,所述标准请求返回包为:在对经过所述web应用防护系统的http/s流量进行去重后,统计到的频次最高的响应报文长度值所对应的请求返回包。更具体而言,所述标准请求返回包的获取过程如图3所示:
[0073]
步骤s31:采集经过所述web应用防护系统的http/s流量。
[0074]
步骤s32:对所述http/s流量按url和参数键值进行去重。应理解的是,对于重复出现的相同url和参数键值的请求返回包,会影响到后续的频次统计,因此需要先对http/s流量进行去重处理。
[0075]
步骤s33:统计去重后各请求返回包的响应报文长度,选出频次最高的响应报文长度所对应的请求返回包;
[0076]
步骤s34:对选出的所述请求返回包进行预处理以得到所述标准请求返回包。目前服务器端的编程语言常用的数据格式有json数据格式、xml数据格式和html数据格式,各数据格式的特点已于上文中详述,故不再赘述。本示例仍以json数据格式为例来说明预处理过程。
[0077]
例如一个demo的请求案例在进行预处理前的请求响应内容为:
[0078]
{
[0079]
"b":"123",
[0080]
"c":[
[0081]
"rj111-115577",
[0082]
"rj121-115577",
[0083]
"rj131-115577"
[0084]
],
[0085]
"a":"123"
[0086]
}
[0087]
在对该请求响应内容进行响应的预处理,即嵌套键值按字母顺序排列,值为列表的嵌套键值仅保留列表最长值,最终处理结果如下:
[0088]
{
[0089]
"a":"123",
[0090]
"b":"123",
[0091]
"c":[
[0092]
"rj131-115577"
[0093]
]
[0094]
}
[0095]
步骤s13:计算所述最长公共子序列在所述当前请求返回包中的报文长度占比值,并将所述长度占比值与预设占比阈值做比较。
[0096]
所述长度占比值=公共子序列的报文长度/当前请求返回包的报文长度。举例来说,假设标准请求返回包的请求响应内容为id1 fristname,admin surname admin,并且这些请求响应内容在所述当前请求返回包(攻击请求)内容中全部都有,那么提取到的最长公共子序列就是标准请求返回包的全部内容。所述标准请求返回包的报文长度例如可以为100,当前请求返回包的报文长度例如为300,那么长度占比值的计算结果就是1/3,再将计算得到的长度占比值和预设占比阈值做比较。
[0097]
为能够进一步凸显本发明专利的显著技术效果,现以现有技术方案进行比较如下:默认功能下,当用户在表单中填入user id后,提交请求会返回用户相关信息;假设此时返回报文长度为100,在大多数情况下,正常请求的返回均如此,因此统计后请求最多的长度即为100。例如,用户输入user id后,返回如下:“id:1,first name:admin,surname:admin”。
[0098]
当对这个功能进行sql注入攻击时,由于后台代码存在漏洞,是对sql进行拼接的方式执行sql语句,$query="select first_name,last_name from users where user_id='$id';",因此当用户输入的恶意请求的id参数为1'union select1,schema_name from information_schema.schemata#时,响应内就会发生较大改变,例如响应报文长度从100变为300。
[0099]
若直接引入扫描器中常用的最长公共子序列算法进waf的问题,在json格式的请求相应报文中,因为json格式的特性,key值往往是随机变化的,类似results的列表,随着内容的增多会不断变多。因为key值顺序发生改变,导致最长公共子序列的计算结果变小,不再是1,或者因为results原来只有2条数据,随着时间增加变成了30条数据,最长公共子序列的计算结果都会变小,从而导致waf匹配后最长公共子序列的计算结果偏低,认为是非正常请求,进入拦截过程进行严格的正则匹配导致误报。
[0100]
而本发明将最长公共子序列的算法的使用方式进行改进,对请求响应内容进行数据结构预处理,基于日常流经waf的流量统计出一标准请求返回包,根据最长公共子序列算法提取当前请求返回包与标准请求返回包的最长公共子序列,再计算最长公共子序列在当前请求返回包中的报文长度占比值,通过判断该占比值与预设阈值的比较来确定是放行还是拦截该sql注入请求,因此可通过对正常请求收集和预处理等方式增强waf拦截sql注入攻击的能力。
[0101]
步骤s14:若所述长度占比值达到所述预设占比阈值,则放过所述sql注入请求;否则,对所述sql注入请求进行正则匹配,并根据匹配结果进行拦截或放过处理。
[0102]
需说明的是,所述预设占比阈值可根据实际情况进行相应设定,本实施例对此不作限定。本示例中按照经验值将预设占比阈值设定为0.5,由于长度占比值1/3未达到预设占比阈值0.5,因此不能放过该sql注入请求,而应对其进行严格的正则匹配。若匹配成功,则应拦截该sql注入请求;若匹配不成功,则可以放行该sql注入请求。
[0103]
如图4所示,展示了本发明一实施例中基于web应用防护系统的sql注入漏洞检测装置的结构示意图。本实施例中的sql注入漏洞检测装置400包括预处理模块401、最长公共子序列提取模块402、注入请求处理模块403。
[0104]
所述预处理模块401用于接收sql注入请求,对所述sql注入请求的响应内容进行预处理,得到对应的当前请求返回包。
[0105]
在一些示例中,所述预处理模块401对所述请求响应内容中的嵌套键值按字母顺序排列,并当值为列表时仅保留列表最长值,以形成树形结构。
[0106]
所述最长公共子序列提取模块402用于提取所述当前请求返回包与标准请求返回包的最长公共子序列。
[0107]
于本实施例中,采用最长公共子序列算法来提取最长公共子序列。所述最长公共子序列算法是一种基于给定的两个字符串,求取这两个字符串最长的公共子序列的一种算法。最长公共子序列(longest common sequence)是指一个给定序列的子序列,是将给定序列中零个或多个元素去掉之后得到的结果。应理解的是,最长公共子序列和最长公共子串是两个不同的概念,子串是指给定串中任意个连续的字符组成的子序列。
[0108]
所述注入请求处理模块403用于计算所述最长公共子序列在所述当前请求返回包中的报文长度占比值,并将所述长度占比值与预设占比阈值做比较;若所述长度占比值达到所述预设占比阈值,则放过所述sql注入请求;否则,对所述sql注入请求进行正则匹配,并根据匹配结果进行拦截或放过处理。
[0109]
在一些示例中,所述sql注入漏洞检测装置400还包括标准请求返回包构建模块404,用于构建所述标准请求返回包;其中,所述标准请求返回包构建模块的构建过程包括:采集经过所述web应用防护系统的http/s流量;对所述http/s流量按url和参数键值进行去重;统计去重后各请求返回包的响应报文长度,选出频次最高的响应报文长度所对应的请求返回包;对选出的所述请求返回包进行预处理以得到所述标准请求返回包。
[0110]
应理解以上装置的各个模块的划分仅仅是一种逻辑功能的划分,实际实现时可以全部或部分集成到一个物理实体上,也可以物理上分开。且这些模块可以全部以软件通过处理元件调用的形式实现;也可以全部以硬件的形式实现;还可以部分模块通过处理元件调用软件的形式实现,部分模块通过硬件的形式实现。例如,注入请求处理模块可以为单独设立的处理元件,也可以集成在上述装置的某一个芯片中实现,此外,也可以以程序代码的形式存储于上述装置的存储器中,由上述装置的某一个处理元件调用并执行以上注入请求处理模块的功能。其它模块的实现与之类似。此外这些模块全部或部分可以集成在一起,也可以独立实现。这里所述的处理元件可以是一种集成电路,具有信号的处理能力。在实现过程中,上述方法的各步骤或以上各个模块可以通过处理器元件中的硬件的集成逻辑电路或者软件形式的指令完成。
[0111]
例如,以上这些模块可以是被配置成实施以上方法的一个或多个集成电路,例如:一个或多个特定集成电路(application specific integrated circuit,简称asic),或,一个或多个微处理器(digital signal processor,简称dsp),或,一个或者多个现场可编程门阵列(field programmable gate array,简称fpga)等。再如,当以上某个模块通过处理元件调度程序代码的形式实现时,该处理元件可以是通用处理器,例如中央处理器(central processing unit,简称cpu)或其它可以调用程序代码的处理器。再如,这些模块可以集成在一起,以片上系统(system-on-a-chip,简称soc)的形式实现。
[0112]
如图5所示,展示了本发明一实施例中sql注入漏洞检测终端的结构示意图。所述sql注入漏洞检测终端包括:处理器51、存储器52、通信器53;存储器52通过系统总线与处理器51和通信器53连接并完成相互间的通信,存储器52用于存储计算机程序,通信器53用于和其他设备进行通信,处理器51用于运行计算机程序,使电子终端执行如上基于web应用防
护系统的sql注入漏洞检测方法的各个步骤。
[0113]
上述提到的系统总线可以是外设部件互连标准(peripheral component interconnect,简称pci)总线或扩展工业标准结构(extended industry standard architecture,简称eisa)总线等。该系统总线可以分为地址总线、数据总线、控制总线等。为便于表示,图中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。通信接口用于实现数据库访问装置与其他设备(例如客户端、读写库和只读库)之间的通信。存储器可能包含随机存取存储器(random access memory,简称ram),也可能还包括非易失性存储器(non-volatile memory),例如至少一个磁盘存储器。
[0114]
上述的处理器可以是通用处理器,包括中央处理器(central processing unit,简称cpu)、网络处理器(network processor,简称np)等;还可以是数字信号处理器(digital signal processing,简称dsp)、专用集成电路(application specific integrated circuit,简称asic)、现场可编程门阵列(field-programmable gate array,简称fpga)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。
[0115]
本发明还提供一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现所述基于web应用防护系统的sql注入漏洞检测方法。
[0116]
本领域普通技术人员可以理解:实现上述各方法实施例的全部或部分步骤可以通过计算机程序相关的硬件来完成。前述的计算机程序可以存储于一计算机可读存储介质中。该程序在执行时,执行包括上述各方法实施例的步骤;而前述的存储介质包括:rom、ram、磁碟或者光盘等各种可以存储程序代码的介质。
[0117]
于本技术提供的实施例中,所述计算机可读写存储介质可以包括只读存储器、随机存取存储器、eeprom、cd-rom或其它光盘存储装置、磁盘存储装置或其它磁存储设备、闪存、u盘、移动硬盘、或者能够用于存储具有指令或数据结构形式的期望的程序代码并能够由计算机进行存取的任何其它介质。另外,任何连接都可以适当地称为计算机可读介质。例如,如果指令是使用同轴电缆、光纤光缆、双绞线、数字订户线(dsl)或者诸如红外线、无线电和微波之类的无线技术,从网站、服务器或其它远程源发送的,则所述同轴电缆、光纤光缆、双绞线、dsl或者诸如红外线、无线电和微波之类的无线技术包括在所述介质的定义中。然而,应当理解的是,计算机可读写存储介质和数据存储介质不包括连接、载波、信号或者其它暂时性介质,而是旨在针对于非暂时性、有形的存储介质。如申请中所使用的磁盘和光盘包括压缩光盘(cd)、激光光盘、光盘、数字多功能光盘(dvd)、软盘和蓝光光盘,其中,磁盘通常磁性地复制数据,而光盘则用激光来光学地复制数据。
[0118]
综上所述,本发明提供基于web应用防护系统的sql注入漏洞检测方法、装置、终端及介质,本发明将最长公共子序列的算法的使用方式进行改进,对请求响应内容进行数据结构预处理,基于日常流经waf的流量统计出一标准请求返回包,根据最长公共子序列算法提取当前请求返回包与标准请求返回包的最长公共子序列,再计算最长公共子序列在当前请求返回包中的报文长度占比值,通过判断该占比值与预设阈值的比较来确定是放行还是拦截该sql注入请求,因此可通过对正常请求收集和预处理等方式增强waf拦截sql注入攻击的能力。
[0119]
上述实施例仅例示性说明本发明的原理及其功效,而非用于限制本发明。任何熟悉此技术的人士皆可在不违背本发明的精神及范畴下,对上述实施例进行修饰或改变。因
此,举凡所属技术领域中具有通常知识者在未脱离本发明所揭示的精神与技术思想下所完成的一切等效修饰或改变,仍应由本发明的权利要求所涵盖。
技术特征:
1.一种基于web应用防护系统的sql注入漏洞检测方法,其特征在于,包括:接收sql注入请求,对所述sql注入请求的响应内容进行预处理,得到对应的当前请求返回包;提取所述当前请求返回包与标准请求返回包的最长公共子序列;计算所述最长公共子序列在所述当前请求返回包中的报文长度占比值,并将所述长度占比值与预设占比阈值做比较;若所述长度占比值达到所述预设占比阈值,则放过所述sql注入请求;否则,对所述sql注入请求进行正则匹配,并根据匹配结果进行拦截或放过处理。2.如权利要求1所述的基于web应用防护系统的sql注入漏洞检测方法,其特征在于,所述对所述sql注入请求的响应内容进行预处理,包括:对所述响应内容中的嵌套键值按字母顺序排列,并当所述嵌套键值的内容为列表时仅保留列表最长值,以形成树形结构。3.如权利要求1所述的基于web应用防护系统的sql注入漏洞检测方法,其特征在于,所述标准请求返回包为:在对经过所述web应用防护系统的http/s流量进行去重后,统计到的频次最高的响应报文长度所对应的请求返回包。4.如权利要求3所述的基于web应用防护系统的sql注入漏洞检测方法,其特征在于,所述标准请求返回包的获取过程包括:采集经过所述web应用防护系统的http/s流量;对所述http/s流量按url和参数键值进行去重;统计去重后各请求返回包的响应报文长度,选出频次最高的响应报文长度所对应的请求返回包;对选出的所述请求返回包进行预处理以得到所述标准请求返回包。5.如权利要求1所述的基于web应用防护系统的sql注入漏洞检测方法,其特征在于,所述长度占比值为所述最长公共子序列的报文长度与所述当前请求返回包的报文长度之比。6.如权利要求1所述的基于web应用防护系统的sql注入漏洞检测方法,其特征在于,所述对所述sql注入请求进行正则匹配,并根据匹配结果进行拦截或放过处理包括:按照正则匹配规则对所述sql注入请求进行正则匹配;若匹配成功,则拦截所述sql注入请求;否则,放过所述sql注入请求。7.一种基于web应用防护系统的sql注入漏洞检测装置,其特征在于,包括:预处理模块,用于接收sql注入请求,对所述sql注入请求的响应内容进行预处理,得到对应的当前请求返回包;最长公共子序列提取模块,用于提取所述当前请求返回包与标准请求返回包的最长公共子序列;注入请求处理模块,用于计算所述最长公共子序列在所述当前请求返回包中的报文长度占比值,并将所述长度占比值与预设占比阈值做比较;若所述长度占比值达到所述预设占比阈值,则放过所述sql注入请求;否则,对所述sql注入请求进行正则匹配,并根据匹配结果进行拦截或放过处理。8.如权利要求7所述的基于web应用防护系统的sql注入漏洞检测装置,其特征在于,还包括:标准请求返回包构建模块,用于构建所述标准请求返回包;其中,所述标准请求返回包构建模块的构建过程包括:采集经过所述web应用防护系统的http/s流量;对所述http/s
流量按url和参数键值进行去重;统计去重后各请求返回包的响应报文长度,选出频次最高的响应报文长度所对应的请求返回包;对选出的所述请求返回包进行预处理以得到所述标准请求返回包。9.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现权利要求1至6中任一项所述基于web应用防护系统的sql注入漏洞检测方法。10.一种sql注入漏洞检测终端,其特征在于,包括:处理器及存储器;所述存储器用于存储计算机程序;所述处理器用于执行所述存储器存储的计算机程序,以使所述终端执行如权利要求1至6中任一项所述基于web应用防护系统的sql注入漏洞检测方法。
技术总结
本发明提供基于Web应用防护系统的SQL注入漏洞检测方法、装置、终端及介质,本发明将最长公共子序列的算法的使用方式进行改进,对请求响应内容进行数据结构预处理,基于日常流经WAF的流量统计出一标准请求返回包,根据最长公共子序列算法提取当前请求返回包与标准请求返回包的最长公共子序列,再计算最长公共子序列在当前请求返回包中的报文长度占比值,通过判断该占比值与预设阈值的比较来确定是放行还是拦截该SQL注入请求,因此可通过对正常请求收集和预处理等方式增强WAF拦截SQL注入攻击的能力。攻击的能力。攻击的能力。
技术研发人员:杨磊 张何钫
受保护的技术使用者:上海钧正网络科技有限公司
技术研发日:2021.12.01
技术公布日:2022/3/8