一种新型正则表达式调用接口实现方式的制作方法

文档序号:8512708阅读:410来源:国知局
一种新型正则表达式调用接口实现方式的制作方法【
技术领域
】[0001]本发明涉及一种新型正则表达式调用接口实现方式。【
背景技术
】[0002]随着互联网应用的普及,网络安全的形式越来越严峻,各种防御性的网络安全产品也越来越多,正则表达式具有较高的灵活性,因此网络安全产品中对攻击信息的判断一般采用正则表达式的方式检测。比如采用第三方开源的pcre库等。但是这些库的接口不能在匹配的过程中介入,导致一些使用上的问题。[0003]一、在网络安全产品越来越普及的同时,黑客意识到常规的攻击会被网络安全产品防御住,因此为了突破这些网络安全产品,在web攻击时常常使用各种编码进行尝试绕过,比如URL、html编码等,网络安全产品也对各种编码绕过进行解码处理。[0004]当前网络全产品的处理方案一般流程如下:接收攻击的内容,保存在缓存buffer中对攻击的内容解码,保存在解码后的缓存buffer2中使用正则对解码后的缓存bufferf进行匹配,匹配成功则说明有攻击,记录下攻击匹配成功的攻击字符串在buffer2中的位置在这种方案中,存在两个冋题:1、对字符串增加了一次拷贝,如果攻击串很多时,这种拷贝是很耗费时间的,也多占用了内存2、在匹配成功后,只能定位到转换后的位置,无法准确定位转换前的位置,从而导致不能准确定位原始攻击内容二、对匹配到攻击信息的匹配结果,保存在列表中,这个列表的长度是调用正则的调用者传入的,如果匹配结果超过了列表的长度,则后面的匹配结果会丢弃,很容易造成攻击绕过。【
发明内容】[0005]本发明的目的在于提供一种新型正则表达式调用接口实现方式,以解决现有技术上的字符串多次拷贝、不能准确定位以及多个匹配结果的保存问题。[0006]为实现上述目的,本发明采用如下技术方案:一种新型正则表达式调用接口实现方式,其特征在于包括以下步骤:步骤S1:从字符串中的字符进行逐个读取;步骤S2:判断是否已读取所有字符,若是,则程序结束;否则调用解码回调函数对读取的字符进行解码;步骤S3:从字符串中消耗本次读取的字符,并设置消耗的字符个数为下次读取输入字符串的偏移个数;步骤S4:匹配解码后的字符,并获取下一个解码后的字符的转换状态;步骤S5:判断是否匹配成功,若匹配成功,则调用匹配回调函数处理匹配结果,所述匹配结果为匹配的开始位置和结束位置;否则回到步骤SI读取下一个字符;步骤S6:根据所述匹配回调函数的返回结果判断是否继续,若返回继续,则返回到步骤SI读取下一个字符;否则程序结束。[0007]本发明与现有技术相比具有以下有益效果:1、本发明减少了字符串拷贝,加快系统处理效率;2、本发明减少了系统的整体内存占用;3、本发明能准确定位匹配成功的位置在解码前的原始串中的位置;4、本发明的匹配结果的保存不受限于预先分配的缓冲空间,可以在回调函数中无限扩展或根据匹配规则的级别需要是否终止匹配。【附图说明】[0008]图1是现有的正则表达式的匹配流程图。[0009]图2是本发明流程图。【具体实施方式】[0010]下面结合附图及实施例对本发明做进一步说明。[0011]请参照图1,本发明提供一种新型正则表达式调用接口实现方式,其特征在于包括以下步骤:步骤S1:从字符串中的字符进行逐个读取;步骤S2:判断是否已读取所有字符,若是,则程序结束;否则调用解码回调函数对读取的字符进行解码;步骤S3:从字符串中消耗本次读取的字符,并设置消耗的字符个数为下次读取输入字符串的偏移个数;步骤S4:匹配解码后的字符,并获取下一个解码后的字符的转换状态;步骤S5:判断是否匹配成功,若匹配成功,则调用匹配回调函数处理匹配结果,所述匹配结果为匹配的开始位置和结束位置;否则回到步骤SI读取下一个字符;步骤S6:根据所述匹配回调函数的返回结果判断是否继续,若返回继续,则返回到步骤SI读取下一个字符;否则程序结束。[0012]为了让一般技术人员更好的理解本发明的技术方案,以下结合实施例对本发明进行详细介绍。[0013]在web应用防火墙WAF(WebApplicat1nFirewall)中,使用正则表达式来进行匹配攻击威胁。使用普通的正则表达式的方式进行检测时,其结果存在本方案中描述的问题无法解决。[0014]假设WAF的正则中包含下面两条规则:规则1001检测输入串是否包含’\d=\d,即检测是否有SQL条件;规则1002测试输入串是否包含select.*from。[0015]在攻击时参数name的值为%27%20%6f%72%201=l%20un1n%20all%20select%20.*%20from%20all_tables—,即请求行类似如下:GET/?name=%27%20%6f%72%201=l%20un1n%20all%20select%20.*%20from%20all_tables—,通过解码我们将发现这个串的内容实质为’or1=1un1nallselect*fromall_tables—,其中是包含了SQL注入攻击信息的。那么在攻击检测的匹配过程中,普通的匹配方式如下:将%27%20%6f%72%201=l%20un1n%20all%20select%20.*%20from%20all_tables—解码为一个新的串’or1=1un1nallselect*fromall_tables—,新的串采用新的缓冲保存;针对新串执行正则表达式匹配;在匹配的过程中,假设只能保存一个匹配结果,那么只有规则1001被匹配,且记录到的匹配的结束位置为8,即在转换后串中的’or1=1,显然在原始串中的位置不是这个。采用新的方案时,匹配过程如下:循环读取%27%20%6f%72%201=l%20un1n%20all%20select%20.*%20from%20all_tables—,每次读取一个字符,对每个字符串进行解码判断,如果是%,那么进行解码,并消耗后面的两个字符,比如%27,在读取到%时,解码回调函数将执行,并根据后面的27两个数字解码出“’”,同时也消耗了两个字符,下次读取字符时,从27的后面开始读取;对每个解码后的字符判断是否匹配到了规则,这里有两种执行路径:1、如果没有匹配到规则,则从步骤I开始继续读取字符;2、如果有匹配到规则,则调用匹配回调进行记录匹配的结果处理,本实施例中从最开始一直到1=1后面才会匹配到1001规则,此时将调用匹配回调函数记录规则1001和匹配的结束位置为18,然后重新从步骤I开始执行,在执行到最后面的一后,将匹配到第二个规则1002,此时再次调用匹配回调函数记录规则1002,匹配的结束位置为68。[0016]以上所述仅为本发明的较佳实施例,凡依本发明申请专利范围所做的均等变化与修饰,皆应属本发明的涵盖范围。【主权项】1.一种新型正则表达式调用接口实现方式,其特征在于包括以下步骤:步骤S1:从字符串中的字符进行逐个读取;步骤S2:判断是否已读取所有字符,若是,则程序结束;否则调用解码回调函数对读取的字符进行解码;步骤S3:从字符串中消耗本次读取的字符,并设置消耗的字符个数为下次读取输入字符串的偏移个数;步骤S4:匹配解码后的字符,并获取下一个解码后的字符的转换状态;步骤S5:判断是否匹配成功,若匹配成功,则调用匹配回调函数处理匹配结果,所述匹配结果为匹配的开始位置和结束位置;否则回到步骤SI读取下一个字符;步骤S6:根据所述匹配回调函数的返回结果判断是否继续,若返回继续,则返回到步骤SI读取下一个字符;否则程序结束。【专利摘要】本发明涉及一种新型正则表达式调用接口实现方式,其特征在于包括以下步骤:从字符串中的字符进行逐个读取;判断是否已读取所有字符,若是,则程序结束,否则调用一解码回调函数对读取的字符进行解码;从字符串中消耗本次读取的字符,并设置消耗的字符个数为下次读取输入字符串的偏移个数;匹配解码后的字符,并获取下一个解码后的字符的转换状态;判断是否匹配成功,若匹配成功,则调用匹配回调函数处理匹配结果,否则读取下一个字符;根据所述匹配回调函数的返回结果判断是否继续,若返回继续,则读取下一个字符,否则程序结束。本发明解决了现有技术上的字符串多次拷贝、不能准确定位以及多个匹配结果的保存问题。【IPC分类】G06F17-30,G06F21-55【公开号】CN104834856【申请号】CN201510234018【发明人】王琦,刘坤朋,张木连,杨大志【申请人】福建六壬网安股份有限公司【公开日】2015年8月12日【申请日】2015年5月11日
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1