一种SQL注入点的检测方法与流程

文档序号:15625039发布日期:2018-10-09 22:46阅读:4879来源:国知局

本发明涉及数据库安全技术领域,

尤其是,本发明涉及一种sql注入点的检测方法。



背景技术:

随着互联网通信技术和网站技术的迅猛发展,web应用已经越来越多样化。web已经不再只由静态网页提供信息服务,而变成了可与数据库进行交互的一项技术。正是由于web技术与数据库技术的完美融合,如今的web应用才分布的愈发广泛。除了云计算、o2o、电子商务等新兴领域,web数据库技术在传统教育、政府、医疗等方面发挥了重要作用。

网站技术的发展日新月异,但是网站安全问题也随之越发突出,近几年数据库泄露事件更是频繁发生,sql(结构化查询语言:structuredquerylanguage)注入攻击是对数据库进行攻击的最常用的手段之一。首先,攻击者通过构造sql语句,把sql语句插入到web表单提交或者输入域名或页面请求的查询字符串,最终达到绕过服务器验证获取数据库中的内容,或者进行执行恶意的sql命令。

为避免用户采用的应用程序构造动态的sql语句执行非法的数据查询,需要对web应用进行sql注入点的测试。

例如中国专利发明申请cn107358098a公开了基于插件的结构化查询语言sql注入检测方法和装置,在全球广域网web应用服务器上部署sql拦截插件,web应用服务器中执行如下sql注入检测方法包括:接收数据库访问请求;获取数据库访问请求中的请求参数值,判断当前请求参数值中是否存在sql关键字;若当前请求参数值中存在sql关键字,从数据库访问请求中,获取的包含sql关键字的完整sql语句;提取完整sql语句的词法,若完整sql语句的词法与sql查询原生语句的词法不一致,则采用sql拦截插件在数据库访问请求中加入sql拦截探针。本发明能够解决现有的sql注入检测技术存在的误报和漏报的问题。

然而,上述方法依然存在以下缺点:1、需要多次获取数据库访问请求参数值,并提取完整sql语句的词法,导致检测过程过于复杂,检测成本更高;2、sql语句繁多,没有对大量的sql注入点的检测情况下,sql注入点的检测精确度不够。



技术实现要素:

本发明的目的在于提供一种注入点位置确认准确,sql语句合法性检测精确度高,能有效针对web系统的注入攻击行为进行预防,且简单方便,便于操作的sql注入点的检测方法。

为解决上述问题,本发明采用如下技术方案得以实现的:

一种sql注入点的检测方法,包括以下步骤:

s1:记录预定时间内的web请求和数据库请求;

s2:发掘前件为web请求,后件为数据库请求的频繁项集;

s3:对频繁项集进行筛选,查找注入点并加入注入库;

s4:读取所述注入点中web请求映射到数据库请求中的参数,并将所述注入点并进行标记;

s5:对上述标记注入点进行安全检测。

优选地,执行步骤s1之前,建立超时时间,记录web请求和数据库请求时开始计时,达到超时时间,即停止记录。

优选地,在执行步骤s1之后,将记录的web请求和数据库请求保存至存储库。

优选地,执行步骤s2之前,生成事务数据库d。

优选地,生成事务数据库d的步骤具体为:

sd1:从存储库中读取一条web请求数据;

sd2:提取所述web请求的模型,拆分为web请求模型和web请求参数;

sd3:基于web请求的时间,选取预定长度的数据库请求记录;

sd4:提取所述数据库请求的模型,拆分为数据库请求模型和数据库请求参数;

sd5:将所述web请求和数据库请求作为一条事务数据库添加至事务数据库d,并重复执行步骤sd1至sd5。

优选地,步骤s2具体为:

s21:扫描事务数据库d,收集频繁项的集合f和频繁项的支持度;

s22:读取一个频繁项在集合f中按照支持度进行排序,生成频繁项排列表l;

s23:读取数据库,建立频繁模式树;

s24:判断生成的频繁模式树是否为单频繁模式树路径;若是,则返回步骤s22;否则执行步骤s25;

s25:为频繁模式树中的每一个节点生成条件模式库;

s26:依据条件模式库构造条件频繁模式树;

s27:递归构造条件频繁模式树,并增长其包含的频繁项集。

优选地,执行步骤s3时,筛选的依据就是web请求中参数和数据库请求的参数是否匹配,这里一般比较web请求中的get、head或post参数的数值。

优选地,执行步骤s3时,筛选获得的频繁项集为关联的web请求和数据库请求,且注入点为web请求映射到数据库请求中的参数。

优选地,步骤s3具体为:

s31:读取事务数据库中的频繁项集;

s32:筛选置信度大于第一判断阈值的频繁项集;

s33:抽取一个频繁项中的web请求和数据库请求数据;

s34:判断抽取的数据选取相似度是否大于第二判断阈值的参数;若大于,则作为注入点加入注入库,返回步骤s33;否则,直接返回步骤s33。

优选地,执行步骤s31之后,生成第一判断阈值和第二判断阈值。

优选地,步骤s5具体为:

s51:通过标记注入点,收到数据库请求r1;

s52:提取模式为pr1,且参数为a1的数据库请求模型;

s53:在注入库中查找p1;

s54:判断是否查找到p1;若查找到p1,则分析参数a1,并得到模式pa1,执行步骤s55;否则回到步骤s51;

s55:判断模式pa1与p1的参数模式是否匹配;若匹配则所述标记注入点无威胁;否则,有威胁。

本发明一种sql注入点的检测方法有益效果在于:注入点位置确认准确,sql语句合法性检测精确度高,能有效针对web系统的注入攻击行为进行预防,且简单方便,便于操作。

附图说明

图1为本发明一个实施例的流程图;

图2为本发明一个实施例中生成数据库的流程图;

图3为本发明一个实施例中频繁项的挖掘流程图;

图4为本发明一个实施例中注入点的查找流程图;

图5为本发明一个实施例中注入点的检测流程图。

具体实施方式

以下是本发明的具体实施例,对本发明的技术方案作进一步的描述,但本发明并不限于这些实施例。

现在将参照附图来详细描述本发明的各种示例性实施例。应注意到:除非另外具体说明,否则在这些实施例中阐述的模块和步骤的相对布置和步骤不限制本发明的范围。

网站技术的发展日新月异,但是网站安全问题也随之越发突出,近几年数据库泄露事件更是频繁发生,sql(结构化查询语言:structuredquerylanguage)注入攻击是对数据库进行攻击的最常用的手段之一。首先,攻击者通过构造sql语句,把sql语句插入到web表单提交或者输入域名或页面请求的查询字符串,最终达到绕过服务器验证获取数据库中的内容,或者进行执行恶意的sql命令。

为避免用户采用的应用程序构造动态的sql语句执行非法的数据查询,需要对web应用进行sql注入点的测试。

以下结合图1至5所示,仅为本发明的其中一个实施例,为解决上述问题,本发明采用如下技术方案得以实现的:一种sql注入点的检测方法,包括以下步骤:

s1:记录预定时间内的web请求和数据库请求;

即为选取一段时间内的请求数据参数的综合记录下来,并根据此记录信息进行下一步的工作,这段时间可以自由设定,记录时间短,则读取样本少,查找迅速,合法性检测快捷;反之记录时间长,则读取样本多,注入点查找精确,合法性检测方便。

为了更方便的了解本步骤,可以在执行步骤s1之前,先建立一个超时时间,在记录web请求和数据库请求时,开始计时,计时达到了建立的超时时间期限,即停止记录。

s2:发掘前件为web请求,后件为数据库请求的频繁项集;

在步骤s1记录的web请求和数据库请求中,挖掘互有联系的web请求和数据库请求,并找到其频繁项的集。

s3:对频繁项集进行筛选,查找注入点并加入注入库;

步骤s2中获取的频繁项集范围依旧很大,需要进行筛选,筛选的依据就是web请求中参数和数据库请求的参数是否匹配,这里一般比较web请求中的get、head或post参数的数值。筛选获得精确的频繁项集即为关联的web请求和数据库请求。

s4:读取所述注入点中web请求映射到数据库请求中的参数,并将所述注入点并进行标记;

一般参数的模式都是单个的词,不过,如为多个词一般有固定的模式,采用普遍额关键词分析方式无法更好的检测附带查询和注释方式的攻击。

而在本发明中,在筛选出来的频繁项集中,读取web请求映射到数据库请求中的参数,此参数就是需要寻找的可能的注入点,仅仅需要对此注入点进行检测,即可对数据库的注入点进行检测,对此参数进行标注,方便步骤s5的安全监测。

这样可以更好的检测附带查询和注释方式的攻击。

s5:对上述标记注入点进行安全检测。

对于数据库安全系统来说,在不了解应用程序的情况下,难以判断注入点,在注入的语句与平常执行的语句类似的情况下,就无法识别sql注入。如果能够确定注入点的位置,则可以根据注入点的数据特征来检测sql语句是否合法,现在已经找到注入点位置及参数,仅仅需要检测其参数即可检测sql语句的合法性。

为了使本发明整个流程更好的运行,在这些步骤中还可以添加更多细节以优化,使最后注入点的检测更准确,数据库安全性更高。

首先,在执行步骤s1之后,可以将记录的web请求和数据库请求保存至存储库。方便后面的再次读取,以及参数对比时具有参照存储库。

然后,执行步骤s2之前,生成事务数据库d。

更准确的来说,生成事务数据库d的步骤具体为:

sd1:从存储库中读取一条web请求数据;

sd2:提取所述web请求的模型,拆分为web请求模型和web请求参数;

sd3:基于web请求的时间,选取预定长度的数据库请求记录;

sd4:提取所述数据库请求的模型,拆分为数据库请求模型和数据库请求参数;

sd5:将所述web请求和数据库请求作为一条事务数据库添加至事务数据库d,并重复执行步骤sd1至sd5。

当然,在执行步骤sd3之前,设定数据库请求记录选取长度值,这个长度可以随意设置,只要可以获取一条完整的数据库请求参数即可。也可以获取更多的数据库请求参数,后面在经过对比即可。

生成事务数据库d是为了方便频繁项集的挖掘,以及频繁项集中的筛选,仅仅需要在所述事务数据库d进行读取即可。

在事务数据库d生成之后,便可以对前件为web请求,后件为数据库请求的频繁项集进行挖掘了,即为执行步骤s2,频繁项集可以从事务数据库d中的参数获得,步骤s2具体为:

s21:扫描事务数据库d,收集频繁项的集合f和频繁项的支持度;

s22:读取一个频繁项在集合f中按照支持度进行排序,生成频繁项排列表l;

s23:读取数据库,建立频繁模式树;

s24:判断生成的频繁模式树是否为单频繁模式树路径;若是,则返回步骤s22;否则执行步骤s25;

s25:为频繁模式树中的每一个节点生成条件模式库;

s26:依据条件模式库构造条件频繁模式树;

s27:递归构造条件频繁模式树,并增长其包含的频繁项集。

上面我们也说到了,生成事务数据库d是为了方便频繁项集的挖掘,仅仅需要在所述事务数据库d进行读取即可,减小了工作量,又由于事务数据库d中保存的均为有联系的web请求和数据库请求,读取更便捷,频繁项集对比度更高,更容易进行挖掘。

再然后,执行步骤s3时,筛选获得的频繁项集为关联的web请求和数据库请求,且注入点为web请求映射到数据库请求中的参数。

具体说明,步骤s3分为:

s31:读取事务数据库d中的频繁项集,

s32:筛选置信度大于第一判断阈值的频繁项集;

s33:抽取一个频繁项中的web请求和数据库请求数据,

s34:判断抽取的数据选取相似度是否大于第二判断阈值的参数;若大于,则作为注入点加入注入库,返回步骤s33;否则,直接返回步骤s33。

为了方便步骤3的执行,在执行步骤s31之后,生成第一判断阈值和第二判断阈值。第一判断阈值和第二判断阈值越大,则筛选严密度越高,获得的频繁项集精确度越高。

最后,步骤s4将步骤s3筛选得到的注入点进行读取和标记之后,需要对这些注入点的数据来检验sql语句的合法性,即执行步骤s5,这里的步骤s5具体为:

s51:通过标记注入点,收到数据库请求r1;

s52:提取模式为pr1,且参数为a1的数据库请求模型;

s53:在注入库中查找p1;

s54:判断是否查找到p1;若查找到p1,则分析参数a1,并得到模式pa1,执行步骤s55;否则回到步骤s51;

s55:判断模式pa1与p1的参数模式是否匹配;若匹配则所述标记注入点无威胁;否则,有威胁。

本发明具有以下增益效果:

本发明一种sql注入点的检测方法的注入点位置确认准确,sql语句合法性检测精确度高,能有效针对web系统的注入攻击行为进行预防,且简单方便,便于操作。

虽然已经通过示例对本发明的一些特定实施例进行了详细说明,但是本领域的技术人员应该理解,以上示例仅是为了进行说明,而不是为了限制本发明的范围,本发明所属技术领域的技术人员可以对所描述的具体实施例来做出各种各样的修改或补充或采用类似的方式替代,但并不会偏离本发明的方向或者超越所附权利要求书所定义的范围。本领域的技术人员应该理解,凡是依据本发明的技术实质对以上实施方式所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1