基于语义分析的智能防sql注入方法_2

文档序号:8395938阅读:来源:国知局
字符串,当处理的是最后一字符串时,将字符串发到有害池中,并根据有害池里有害字符串的数目,返回处理结果。
[0016]再进一步地,上述的基于语义分析的智能防SQL注入方法,其中:所述的返回结果中含有结果类,结果类中包含出问题的参数和停止原因,所述出问题的参数至少包括是否有害和危害程度,所述的危害程度包括有,请求有害,接下来所有进一步的处理必须停止,以及,请求有害,但能进一步的处理能持续。
[0017]本发明技术方案的优点主要体现在:处理期间能够拥有自己的请求,不会阻塞系统的请求。同时,安全性更高,能够对提交过来的cookie数据也进行过滤,不会给黑客留下可趁之机。更为重要的是,能够从源头上杜绝SQL注入性攻击。并且,实施本发明的接入组件简单易用,接入方便。再者,能够给出有害信息的详细说明,包括哪些参数是有问题的、危害严重程度和请求被停止的原因,便于人员介入现场进行处理。由此,为本领域的技术进步拓展了空间,实施效果好。
【附图说明】
[0018]本发明的目的、优点和特点,将通过下面优选实施例的非限制性说明进行图示和解释。这些实施例仅是应用本发明技术方案的典型范例,凡采取等同替换或者等效变换而形成的技术方案,均落在本发明要求保护的范围之内。
[0019]图1是基于语义分析的智能防SQL注入方法的构造示意图。
【具体实施方式】
[0020]如图1所示的基于语义分析的智能防SQL注入方法,其与众不同之处在于采用了如下步骤:首先,对来自网页的所有请求进行数据拦截或是数据提取,该数据出现为字符串。之后,将提取到的数据送入安全中心(Security Center)进行处理并返回结果,若数据有害,则跳转到ShowErr页面,若数据无害,则继续进行正常请求。
[0021]具体来说,采用的数据拦截为,通过Global, asax拦截所有的请求。且数据提取为,提取 querystring、form、cookie 中的数据。换句话说,在,net 当中 querystring form分别是两种请求,获取到的对象。之后,替换掉其中的转义字符,根据预设判断规则按顺序逐条检查,判断这些数据是否有害。并且,在上述过程中无需对请求进行处理,只返回结果即可,使用者可依据结果做相应人工识别处理。
[0022]就本发明一较佳的实施方式来看,采用的根据预设判断规则按顺序逐条检查过程为:首先,通过判断字符串是否为完整的SQL语句。之后,判断字符串是否为部分的SQL语句。接着,判断字符串是否为数字型的SQL语句。最后,判断字符串是否为逻辑短路型的SQL语句。
[0023]进一步来看,所采用的通过判断字符串是否为完整的SQL语句的处理流程为:步骤①,判断字符串中“一”的位置,然后截取“一”之前的字符串,不包括“一”,将方括号“[”和“]”替换为空格。这样,在实际实施的时候,可以避免误判json语句,因为json语句一般都在方括号中,比如:[{id:1, name=’ jack’ },{id: 2,name=’ tom’}]。步骤②,以空格拆分,若拆分的数组长度小于3,则为无害结束,反之则为有害,继续运行。之后的步骤③,去除多个空格,(也就是把多个空格变成一个)再次以空格拆分,若拆分的数组长度小于3,则为无害结束,反之则为有害,继续运行本条字符串判断结束,判断请求当中的下一条字符串。若拆分的数组等于3时,则处理误拦截情况。步骤④,采用TSqllOOParser判断字符串是否为合法的SQL语句。其原因在于,SqllOOParser是微软的一个类,可根据提供的文本读取器返回脚本片段和错误的列表,在这里用于判断一条SQL语句是否合法,提高了泛用性。
[0024]与之对应的是,本发明采用的判断字符串是否为部分的SQL语句的处理流程如下:
首先,判断输入字符串长度是否小于3。若小于,则为无害结束,反之,则为有害,继续运行。之后,去掉最后的空格,然后判断是否为“’ ”号结尾,既取出第一个“’ ”的位置,然后取出最后一个“’ ”号的位置,若位置相同,则无害结束,反之,则为有害,继续运行。最后,给输入的字符串前面加入内容为,SELECT * FROM USERS WHERE ID=的部分SQL语句,用TSqllOOParser判断字符串是否为合法的SQL语句。并且,为了实施的便利,这个处理可以通过微软官方DLL来配合处理。
[0025]同时,采用的所述的判断字符串是否为数字型的SQL语句的处理流程采用如下步骤:步骤①,判断输入字符串长度是否小于5,若是,则为无害结束,反之,则为有害,继续运行。步骤②,去掉两端空格,以空格拆分。在实际执行时,若拆分的数组长度小于3,则为无害结束,反之有害,则继续运行。步骤③,判断第一个空格前面的字符串是否可转换成Double类型,若是,则给输入的字符串前面加入部分SQL语句,用TSql 10Parser判断字符串是否为合法的SQL语句,若不是则判断第一个;号前面的字符串是否已转换成Double类型。若是,则给输入的字符串前面加入部分SQL语句,用TSql 10Parser判断字符串是否为合法的SQL语句。若不是,则无害结束。
[0026]再进一步来看,采用的判断字符串是否为逻辑短路型的SQL语句的处理流程为:首先,需要判断字符串中是否有单引号。若有,则继续,若没有,则结束。之后,判断是否只有一个单引号。若不是,则继续,若是,则结束。接着,以第一个单引号为界,把字符串分割成两个部分。剔除第二部分任何单引号,将把第一部分和第二部分合并,构成新的字符串。最后,在新的字符串前面加入部分SQL语句,采用TSqllOOParser判断字符串是否为合法的SQL语句。在此期间,若是,则为有害,将该条字符串放入有害池当中,处理下一条字符串。若不是,则无害返回,处理下一条字符串。当最后一条字符串处理完成时,检查有害池中的有害字符串条数,返回处理结果。
[0027]结合实际数据处理来看,本发明采用的判断字符串是否为逻辑短路型的SQL语句的处理流程为,步骤①,判断字符串中是否有单引号。若有,则继续,若无,则结束。步骤②,判断是否只有一个单引号。若不是,则继续,若是,则结束。步骤③,设第一个单引号为界,将字符串分割成两个部分,剔除第二部分任何单引号后,将第一部分和第二部分合并。步骤④,在合并后的字符串前面加入部分SQL语句,用TSqllOOParser判断字符串是否为合法的SQL语句,如若不是,则无害结束,若是,则将该条字符串放入有害池当中,处理下一条字符串,当处理的是最后一字符串时,将字符串发到有害池中,并根据有害池里有害字符串的数目,返回处理结果。
[0028]在本发明的实际处理过程中,先前返回结果中含有结果类,该结果类中包含出问题的参数和停止原因。具体来说,出问题的参数至少包括是否有害和危害程度。为了便于进行区分,实现有的放矢的处理,危害程度包括有,请求有害,接下来所有进一步的处理必须停止。以及,请求有害,但能进一步的处理能持续。在应用的时候,通过Inspect1nResultSeverity.Halt = O 和 Inspect1n ResultSeverity.Continue = I,Halt 表不请求有害。其中的Continue就表明进一步的处理可能会持续下去。
[0029]结合上述的处理过程来看,以一个请求为单位,一个请求当中包括多条字符串,每条字符串都需要使用预设规则判断是否有害,有害的话则放入,有害池中。当所有字符串判断结
当前第2页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1