一种基于SQL异构化的SQL注入防御方法与流程

文档序号:13667035阅读:291来源:国知局
一种基于SQL异构化的SQL注入防御方法与流程

本发明涉及数据库安全技术领域,特别是指一种适用于对b/s(浏览器/服务器)架构的应用程序进行sql注入攻击防御的基于sql异构化的sql注入防御方法。



背景技术:

sql注入攻击,是一种只需要攻击者付出很少努力就能取得成功的攻击方式,会对web应用系统的安全和隐私造成严重影响。这种攻击方式能够频繁用于攻击那些接收用户输入并把输入组合到sql查询中的web应用。如果这些应用没有很好的对用户输入进行规则性检查和处理,那么攻击者就可能通过精巧编写的输入字符串来注入sql语句,从而允许其访问或破坏数据库的数据,修改数据库的结构等,危害web应用系统的安全。

目前,解决sql注入攻击的方式普遍关注于找出应用程序中所有的sql注入漏洞,并修补这些漏洞,但这种方式存在以下问题:

(1)当应用程序规模较大时,找出所有sql注入漏洞是很困难的,并且修补各类不同编程语言的漏洞对程序员存在较高的要求;

(2)找出漏洞进行修补是一种被动防御方式,不能主动对连接请求进行识别与阻断。

因此需要转换攻击防御策略,从根本上解决sql注入攻击的威胁。



技术实现要素:

有鉴于此,本发明提出一种基于sql异构化的sql注入防御方法,其能够通过转换查询请求,将sql交互语义变为不透明,从而打造一个应用程序与数据库交互的安全空间,从根本上实现对sql注入攻击的防御。

为了实现上述目的,本发明提供的技术方案是:

一种基于sql异构化的sql注入防御方法,该方法应用于数据库服务器,其包括以下步骤:

(1)启动异构化代理服务,注册预定义的端口,监听应用程序发起的数据库连接请求;

(2)当应用程序调用异构化模块时,根据预定义规则,通过异构化模块对传入的sql语句进行转换,返回异构化的字符串srand,然后等待应用程序将srand发送到异构化代理;

(3)异构化代理收到协议请求,判断源ip地址是否合法,若不合法则直接丢弃;若合法则创建一个到数据库的连接ldb,并将源ip地址与创建的连接ldb进行映射ml;

(4)异构化代理根据客户端与服务器的交互协议,判断当前请求类型是否为查询请求,若不是,则将请求通过ldb转发到数据库;若为查询请求,则根据交互协议解析出数据库查询字符串sinit;

(5)根据判据规则,通过异构化代理解析sinit,识别该语句是否为sql注入攻击;若不是攻击,则视为合法请求,异构化代理则将sinit根据预定义规则转换为标准数据库查询语句ssql;按照客户端服务器交互协议,异构化代理重新计算包长度,并把ssql封装到新的协议包中,通过ldb发送到数据库,并将数据库的响应转发给应用程序;

(6)当异构化代理识别sinit为非法查询语句时,则认为此次请求为sql注入攻击,直接将该请求丢弃,并将此次请求记录到攻击日志中;依据交互协议,异构化代理组装一个新的查询错误包,回复给应用程序;

(7)当应用程序发送数据库断开请求时,数据库断开与异构化代理间的连接ldb,异构化代理根据映射关系ml,断开与源ip地址的连接,完成sql注入攻击的防御。

可选的,所述步骤(2)中,通过异构化模块对传入的sql语句进行转换的方式为,sql语句转换采用关键字被替换策略,被替换对象包含数据定义语言ddl、数据操作语言dml以及sql函数。

可选的,所述数据库服务器中运行的服务器为mysql数据库,所述步骤(4)中的交互协议采用的是基于jdbc的tcp协议,索引为0~2的包数据为整个数据包长度,索引为3的包数据为包号,索引为4的包数据为命令类型,索引为5以后的包数据为数据内容。

可选的,所述步骤(5)中识别语句是否为sql注入攻击的判据规则为出现相关sql关键字组合,所述相关sql关键字组合包括以下三种:select、from和where的组合,insert、into和values的组合,以及delete、from和where的组合。

本发明与现有技术相比,所取得的有益效果为:

1、本发明创造性地提出了sql语句异构化、增加异构化代理,构建数据库安全交互空间的新思路,使应用程序数据库不再暴漏在攻击者面前,针对sql注入攻击,将传统的被动防守转化为主动防御。

2、本发明通过部署的异构化代理,解析交互协议,提取、分析、识别查询请求,集中解决了sql注入攻击问题,降低了软件数据库编程开发难度,提高了软件攻击防御能力。

3、本发明进一步地可以实现基于jdbc的mysql数据库代理,该方案提取、设计了sql异构化公共处理流程及软件各功能模块,定义了异构化规则和sql注入攻击检测判据,有利于本发明的推广。

附图说明

图1是本发明的sql异构化代理软件组成结构示意图。

图2是本发明方法的流程图。

具体实施方式

参照图1和图2,本发明实现了一种基于jdbc的mysql数据库代理方法,该方法通过交互协议接收、解析、识别应用程序发送的数据库请求,完成sql注入攻击的防御。

图1是本发明方法的模块组成图,包括sql异构化模块、server通信机模块、client通信机模块、协议解析模块、sql注入攻击判断模块、数据包处理模块和日志管理模块。

该方法的整体流程如图2所示。具体来说,该方法包括以下步骤:

(1)异构化代理软件的server通信机模块启动,通过注册预定义的端口,启动一个tcp服务器,监听应用程序发起的数据库连接请求;

(2)应用程序调用sql异构化模块,传入原始查询语句,根据预定义规则,异构化模块进行转换,返回异构化的字符串srand给应用程序;通过数据库客户端与服务器交互协议,应用程序将异构化字符串发送到异构化代理软件;

(3)server通信机模块收到tcp请求,判断该源ip地址是否合法,若不合法则直接丢弃;若合法,则查询client通信机模块是否为该源ip创建了到数据库的连接,若没有创建,则client通信机模块创建一个到数据库的连接ldb,并将该源ip地址与创建的连接进行映射ml;

(4)协议解析模块根据交互协议,提取出第5个字节判断请求类型是否为查询请求,若不是,将请求通过ldb转发到数据库;若为查询请求,则取出包中的查询语句数据,得到异构化的数据库查询字符串sinit;

(5)sql注入攻击判据模块检查sinit中是否存在sql关键字组合,若不存在,则视为合法请求;异构化模块将sinit反异构化为标准sql语句ssql,数据包处理模块根据交互协议,重新计算包长度并把ssql封装到新的协议包中,通过ldb发送到数据库,server通信机模块将数据库的响应转发给应用程序;

(6)若sinit中存在sql关键字组合,则sql注入攻击判据模块认为此次请求为sql注入攻击,直接将该请求丢弃,并调用日志管理模块将此次请求记录到攻击日志中;依据交互协议,数据包处理模块组装一个新的查询错误包,回复给应用程序;

(7)当应用程序发送数据库断开请求时,数据库断开与client通信机模块的连接ldb,server通信机模块根据映射关系ml,断开与对应源ip地址的连接,完成sql注入攻击的防御。

进一步地,步骤(2)中sql语句转换采用关键字被替换策略,被替换对象包含数据定义语言ddl、数据操作语言dml以及sql函数等关键字。

进一步地,该方法采用的是开源的mysql数据库,步骤(4)中客户端与服务器交互协议采用的是基于jdbc的tcp协议,索引为0~2的包数据为整个数据包长度,索引3的包数据为包号,索引4的包数据为命令类型,索引5以后的包数据为数据内容。

进一步地,步骤(5)中判断异构化代理收到的请求为sql注入攻击,判据规则为出现相关sql关键字组合,包括:组合1(select、from、where)、组合2(insert、into、values)以及组合3(delete、from、where),或者是其他本领域技术人员能够想到的合理组合。

总之,本发明提出了一种基于sql异构化的sql注入攻击防御方法,能够在计算机应用程序访问数据库过程中,对交互的sql指令进行异构化处理,进而识别、阻断sql注入攻击的方法。本发明通过应用程序发送异构化的sql语句进行数据库连接、查询等请求,部署在数据库侧的sql异构化代理根据数据库客户端与服务器间的交互协议,对接收的应用程序请求进行解析与识别,将合法请求转换后发给数据库,并将数据库的响应返回给app,若请求非法,则判断为sql注入攻击进行阻断。本发明保证了应用程序正常业务的数据库请求,又对外部恶意sql注入攻击进行了防御,有效保证了应用程序的数据安全。

可见,本发明改变了传统查找程序漏洞进行修补的被动防守方式,提出了一种基于sql语句异构化并增加异构化代理,从而改变应用程序与数据库交互方式的新思路,是对现有技术的一种重要改进。

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