防止sql注入的方法及系统的制作方法

文档序号:9327233阅读:530来源:国知局
防止sql注入的方法及系统的制作方法
【技术领域】
[0001]本发明涉及一种防止SQL注入的方法及系统。
【背景技术】
[0002]目前许多网站有发现存在SQL注入的漏洞,目前市面上也存在一些检测注入的方法,但是都需要程序员对网站代码进行修改,对程序员的专业要求较高。并且和程序开发方式有着较大的关系。若无法防止SQL注入,将导致许多站点被黑客攻击,数据库密码被泄露等问题。
[0003]现有专利申请(申请号:201310296901.5)公开了一种针对数据库的SQL注入防御的方法,包括如下步骤:(a)接收来自应用系统发出的访问数据库的SQL语句;(b)对SQL语句进行注入判断和检查,若发现SQL注入,则对该SQL注入进行拦截,记录错误,并向所述应用系统返回异常消息;若发现并非为SQL注入,则查询出该SQL语句所需要访问的相应数据库操作的接口规范,拼接出符合该数据库操作接口规范的SQL语句;(c)将步骤(b)拼接出的规范的SQL语句发送到相应的数据库进行数据库操作;和(d)将查询后的结果返回给应用系统。但是该专利申请对所有SQL语句都要进行判断和检查,处理效率低下。

【发明内容】

[0004]本发明所要解决的技术问题是:仅对需要防御的接口 SQL语句进行判断,并对其进行分析、替换处理,处理效率高,且能防止SQL注入到系统中。
[0005]为了解决上述技术问题,本发明采用的技术方案为:提供一种防止SQL注入的方法,包括:
[0006]配置反向代理模块,并记录所有请求日志;
[0007]使用注入检测模块对所述请求进行SQL注入检测,记录存在注入漏洞的请求参数;
[0008]解析所述请求参数,提取对应的参数名称,生成URL摘要集合;
[0009]获取对URL的SQL注入请求;
[0010]反向代理模块发送所述SQL注入请求到注入防御模块;
[0011]注入防御模块判断所述SQL注入请求的地址是否在所述URL摘要集合中;
[0012]若是,则注入防御模块替换所述SQL注入请求的地址的的参数值及相关关键字,获得安全请求;
[0013]发送所述安全请求到目标服务器WEB站点上。
[0014]为解决上述问题,本发明还提供一种防止SQL注入的系统,包括注入检测模块、注入防御模块及目标服务器,还包括:
[0015]反向代理模块,用于记录所有请求日志;
[0016]请求参数记录模块,用于在使用注入检测模块对所述请求进行SQL注入检测后,记录存在注入漏洞的请求参数;
[0017]解析提取模块,用于解析所述请求参数,提取对应的参数名称,以生成URL摘要集合;
[0018]攻击获取模块,用于获取攻击者对URL的注入请求;
[0019]其中,反向代理模块还用于发送所述SQL注入请求到注入防御模块;
[0020]注入防御模块用于判断所述SQL注入请求的地址是否在所述URL摘要集合中;[0021 ] 若是,则注入防御模块替换所述URL参数的参数值及相关关键字,获得安全请求;
[0022]发送模块,发送所述安全请求到目标服务器WEB站点上。
[0023]本发明的有益效果在于:区别于现有技术,通过SQL注入检测,获得存在漏洞的请求参数,生成一个url摘要集合;对获取的相应请求参数进行分析、替换处理,处理效率高,防止SQL注入到系统中。因此本发明可以降低对程序员的要求,提高网站的安全性,无需对源代码进行修改,即可自动对站点进行防御。
【附图说明】
[0024]图1为本发明方法实施例一的流程示意图;
[0025]图2为本发明方法实施例二的流程示意图;
[0026]图3为本发明系统实施例三的结构框图;
[0027]图4为本发明系统实施例四的结构框图。
【具体实施方式】
[0028]为详细说明本发明的技术内容、所实现目的及效果,以下结合实施方式并配合附图予以说明。
[0029]本发明最关键的构思在于:通过SQL注入检测,获取需要防御的请求参数,生成URL摘要集合,对获取的SQL注入进行分析、参数值或关键词替换处理,防止SQL注入到系统中。
[0030]请参照图1,本发明实施例一提供一种防止SQL注入的方法,包括如下步骤:
[0031]S1:配置反向代理模块,并记录所有请求日志;如已知的nginx,使用其中的日志记录功能记录所有请求日志。可选的,反向代理模块也可以是例如windows系统下的IIS ;
[0032]S2:使用注入检测模块对所述请求进行SQL注入检测,记录存在注入漏洞的请求参数;
[0033]S3:解析所述请求参数,提取对应的参数名称,生成URL摘要集合;
[0034]S4:获取攻击者对URL的SQL注入请求;
[0035]S5:反向代理模块发送所述SQL注入请求到注入防御模块;
[0036]S6:注入防御模块判断所述SQL注入请求的地址是否在所述URL摘要集合中;
[0037]若是,则执行步骤S7:注入防御模块替换所述SQL注入请求的地址的参数值及相关关键字,获得安全请求;
[0038]S8:发送所述安全请求到目标服务器WEB站点上。
[0039]应当理解的是,步骤SI中的所有请求日志是一个时间段的所有请求日志,是真实环境中接收到的请求日志。
[0040]如图2所示,在实施例一的基础上,本发明实施例二步骤S3具体为:
[0041]S31:解析所述请求参数,剔除参数值;
[0042]S32:生成仅包含参数名称的URL摘要集合。
[0043]其中,步骤S6之后,还包括:
[0044]若否,则执行步骤S70:注入防御模块确认所述请求为安全请求;并执行步骤S8。
[0045]其中,S7步骤具体为:
[0046]S71:替换所有所述参数值;
[0047]S72:根据脚本替换规则库,采用正则表达式替换相关关键字;
[0048]S73:生成安全请求。
[0049]在一个具体的实施例中,可在进行防御前,预先作如下准备:
[0050]配置反向代理模块,如已知的nginx,使用其中的日志记录功能。或其他替代品,例如windows系统下的IIS,也可以记录请求日志,在本具体实施例中使用nginx是因为和sqlmap进行配套使用,以记录所有请求日志。
[0051]sqlmap是一个自动化的SQL注入工具,其主要功能是扫描,发现并利用给定的URL的SQL注入漏洞,日前支持的数据库是MS-SQL,MYSQL, ORACLE和POSTGRESQL。sqlmap采用四种独特的SQL注入技术,分别是盲推理SQL注入,UN1N查询SQL注入,堆查询和基于时间的SQL盲注入。其广泛的功能和选项包括数据库指纹、枚举、数据库提取、访问目标文件系统,并在获取完全操作权限时实行任意命令。sqlmap的功能强大,相比常规注入工具,sqlmap适用范围更广,效果更好。
[0052]使用sqlmap工具(即注入检测模块)对记录的日志中的请求进行SQL注入测试,将存在注入的请求参数记录到数据库中。
[0053]通过程序对记录下来的存在注入漏洞的请求参数进行解析,将存在注入的参数名称提取出,以生成URL摘要集合。其中参数名称是请求的一部分,并与参数值对应。
[0054]例如:请求http://abc.com/? id = l&name = abc 中,其参数名称为 id 和 name,对应的参数值为I和abc ;优选地,将该请求中的参数值剔除,生成仅包含参数名称的URL摘要集合,即http://abc.com/ ? id = &name =,URL摘要集合是指所有记录下来的URL摘要的总和。
[0055]应当理解的是,剔除参数值后不能保证100%无效SQL注入,但是可以防御绝大多数攻击。
[0056]通过上述方式,已经作好防御的准备,接下来阐述防御的过程,具体地:
[0057]首先是nginx反向代理模块获取攻击者对URL进行SQL注入请求,并将请求转发到SQL注入防御模块,SQL注入防御模块判断请求地址是否提取出来的摘要集合中。如果存在,则说明此URL存在注入漏洞,需要进行防御,执行后续步骤;否
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1