一种基于缓存的验证码校验方法和系统与流程

文档序号:12729120阅读:177来源:国知局
一种基于缓存的验证码校验方法和系统与流程

本发明涉及验证码技术领域,尤其涉及一种基于缓存的验证码校验方法和系统。



背景技术:

软件系统为了方式被恶意破解或者阻挡自动化工具对系统产生的压力,往往会加入验证码机制。

目前,采用的验证码大多为图文验证码,其使用过程为:服务器将随机产生的验证码明文部分存储在session(在计算机中,尤其是在网络应用中,session称为“会话控制”。Session对象存储特定用户会话所需的属性及配置信息。这样,当用户在应用程序的Web页之间跳转时,存储在Session对象中的变量将不会丢失,而是在整个用户会话中一直存在下去)当中,同时利用明文对其进行字符的旋转、扭曲、加入干扰线等方式生成一张图片,对于图片中的明文部分,需要通过人工阅读并手动输入到制定位置。当用户输入的明文被提交到服务器中后,服务器会将事先存入session中的明文与用户输入的明文进行比对,如若一致,则认为该请求由真正的用户产生,可以进行后续逻辑,反之则认为是非法请求,不予执行后续逻辑。总之,现有的实现方案是将明文存储在session当中,当session错乱时,验证码无法正确判别。

在中等规模(若干台服务器)的软件产品中,使用上述验证码机制,存在如下两种方法:

由于用户请求验证码和校验验证码的请求有可能被分配到不同的服务器中,所以可以将若干台服务器之间进行session的同步,以便无论后续请求由哪一台服务器提供服务都能正确从session中读取到之前生成的验证码明文并与用户提交的明文进行比对。原理可参见图1所示。而这种方法存在如下问题:在若干台服务器之间进行session的同步,会导致系统资源额外的开销,进而导致系统性能下降,服务器数量越多,同步的过程越复杂,额外的开销越大,性能下降越显著。

为了避免上述方法中,需要在服务器间共享session带来的系统性能下降的问题,还可以采用Iphash(hash:中文名哈希,一种将任意长度的消息压缩到某一固定长度的消息摘要的函数)的方法:在网络通信中,服务器和用户都拥有唯一的地址标识(IP地址),服务器通过识别用户的地址标识,将其抽象为一个特定的标记,凡是拥有相同标记的用户,所有请求将被始终分配到同一台服务器中。其原理可参见图2所示。但是,这种方法存在以下问题:由于用户来源复杂,很难通过一个统一的算法将请求压力其均匀地分布到各个服务器中。Iphash算法会造成若干服务器中有的比较空闲,有的比较繁忙,没有发挥出所有服务器的性能,造成浪费。



技术实现要素:

本发明的目的在于提供一种基于缓存的验证码校验方法和系统,从而解决现有技术中存在的前述问题。

为了实现上述目的,本发明采用的技术方案如下:

一种基于缓存的验证码校验方法,包括如下步骤:

S1,客户端向验证码服务器系统请求生成验证码,验证码服务器系统包括多个验证码服务器,任意一个验证码服务器接受请求,生成并向所述客户端返回加密字符串,并将动态生成的数据保存至缓存服务器;

S2,所述客户端向所述验证码服务器系统请求获取所述加密字符串对应的图片,任意一个验证码服务器接受请求,对所述加密字符串进行解密,获取原始验证码内容和原始请求时间;

S3,判断所述原始请求时间与当前时间的距离是否超过缓存服务器中设置的验证码有效期,如果是,则不返回任何内容,否则,跳至S4;

S4,在缓存服务器的图片黑名单中查询所述加密字符串是否请求过验证码图片,如果是,则不返回任何内容,否则,生成并向所述客户端返回所述加密字符串对应的图片,并将所述加密字符串保存至缓存服务器的所述图片黑名单中;

S5,所述客户端输入所述加密字符串和所述图片的验证码,并向所述验证码服务器系统请求校验,任意一个验证码服务器接受请求,对所述加密字符串进行解密,如果解密失败,则校验失败,否则,执行S6;

S6,在缓存服务器的验证黑名单中查询所述加密字符串是否被验证过,如果是,则校验失败,否则,抽取解密后的数据,匹配当前时间和所述原始请求时间,如果时间尚在有效期内,则匹配用户输入的验证码和所述原始验证码内容,如果匹配成功,则校验成功,否则,校验失败。

优选地,S6之后还包括步骤,无论匹配是否成功,都将所述加密字符串放入缓存服务器的所述验证黑名单中。

优选地,所述图片黑名单和所述验证黑名单中的缓存服务器有效期长于所述验证码有效期。

优选地,所述加密字符串的格式为:[验证码]_[时间戳]_[随机数]。

优选地,所述验证码的宽度根据配置设置,字符空间是阿拉伯数字和英文大小写,所述时间戳为所述加密字符串的生成时间距离1970年1月1日0时的毫秒数。

优选地,S4中,所述生成所述加密字符串对应的图片,具体为,采用开放源代码的kaptcha验证码生成组件。

优选地,S1中,所述生成加密字符串,具体为,采用XXTEA的加密算法,并在加密之后进行Base64编码。

一种基于缓存的验证码校验系统,包括:

客户端,用于向验证码服务器系统请求生成验证码、获取所述加密字符串对应的图片、输入所述加密字符串和所述图片的验证码以及向所述验证码服务器系统请求校验验证码;

验证码服务器系统,包括多个验证码服务器,且每个验证码服务器的功能相同,均用于接受所述客户端请求,并用于执行以下操作:生成并向所述客户端返回加密字符串,并将动态生成的数据保存至缓存服务器;对所述加密字符串进行解密,获取原始验证码内容和原始请求时间;判断所述原始请求时间与当前时间的距离是否超过缓存服务器中设置的验证码有效期;在缓存服务器的图片黑名单中查询所述加密字符串是否请求过验证码图片,生成并向所述客户端返回所述加密字符串对应的图片,并将所述加密字符串保存至缓存服务器的所述图片黑名单中;在缓存服务器的验证黑名单中查询所述加密字符串是否被验证过,抽取解密后的数据,匹配当前时间和所述原始请求时间,如果时间尚在有效期内,则匹配用户输入的验证码和所述原始验证码内容;

缓存服务器,与所述验证码服务器系统中的每个验证码服务器数据连接,用于每个验证码服务器的数据存储和调用。

本发明的有益效果是:本发明实施例提供了一种基于缓存的验证码校验方法和系统,通过将多个验证码服务器分别与缓存服务器数据连接,实现了多个验证码服务器之间可以通过缓存服务器发生数据交互,从而,对于包括多个验证码服务器的系统而言,客户端请求生成字符串、验证码图片和校验等过程,均可以随机由任意一个验证码服务器来执行,无需在多个验证码服务器之间共享session,在增加验证码服务器提供服务的同时,不会显著增加额外的网络开销,而且可以与其他系统配合,将客户端的请求均匀的分布到各个验证码服务器中,不会造成验证码服务器过忙或过闲的情况,实现资源的充分利用。

附图说明

图1是多个验证码服务器之间共享session的工作原理示意图;

图2是请求和校验均分配到同一台验证码服务器中的工作原理示意图;

图3是本发明提供的基于缓存的验证码校验工作原理示意图。

具体实施方式

为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施方式仅仅用以解释本发明,并不用于限定本发明。

实施例一

如图3所示,本发明实施例提供了一种基于缓存的验证码校验方法,包括如下步骤:

S1,客户端向验证码服务器系统请求生成验证码,验证码服务器系统包括多个验证码服务器,任意一个验证码服务器接受请求,生成并向所述客户端返回加密字符串,并将动态生成的数据保存至缓存服务器;

S2,所述客户端向所述验证码服务器系统请求获取所述加密字符串对应的图片,任意一个验证码服务器接受请求,对所述加密字符串进行解密,获取原始验证码内容和原始请求时间;

S3,判断所述原始请求时间与当前时间的距离是否超过缓存服务器中设置的验证码有效期,如果是,则不返回任何内容,否则,跳至S4;

S4,在缓存服务器的图片黑名单中查询所述加密字符串是否请求过验证码图片,如果是,则不返回任何内容,否则,生成并向所述客户端返回所述加密字符串对应的图片,并将所述加密字符串保存至缓存服务器的所述图片黑名单中;

S5,所述客户端输入所述加密字符串和所述图片的验证码,并向所述验证码服务器系统请求校验,任意一个验证码服务器接受请求,对所述加密字符串进行解密,如果解密失败,则校验失败,否则,执行S6;

S6,在缓存服务器的验证黑名单中查询所述加密字符串是否被验证过,如果是,则校验失败,否则,抽取解密后的数据,匹配当前时间和所述原始请求时间,如果时间尚在有效期内,则匹配用户输入的验证码和所述原始验证码内容,如果匹配成功,则校验成功,否则,校验失败。

上述方法与现有技术相比,可以很好地实现验证码脱离session。验证码服务器之间不再需要共享session,充分利用每台验证码服务器的资源。另外因为引入了黑名单和超时机制,可以很好地抵御重放攻击。

在本发明的一个优选实施例中,S6之后还可以包括步骤,无论匹配是否成功,都将所述加密字符串放入缓存服务器的所述验证黑名单中。

采用上述方法,可以防止验证码的再次验证通过,造成不必要的损失。

在本发明的一个优选实施例中,所述图片黑名单和所述验证黑名单中的缓存服务器有效期长于所述验证码有效期。

其中,验证码服务器将动态生成的数据保存至缓存服务器时,可以将其取哈希作为key,而数据结构本身作为value放入到缓存服务器当中,则缓存服务器中图片黑名单可以采用key格式为:img_black_hash(token),验证黑名单可以采用key格式为verified_hash(token),两者的缓存服务器有效期都要比验证码有效期明显长一些,比如,当验证码有效期设置为30秒时,图片黑名单和验证黑名单中的缓存服务器有效期可以设置为60秒,这样,当下次客户端再拿加密字符串来请求验证码图片时先从图片黑名单里查找,命中就不返回,即便没命中,也由于加密字符串中的时间已经过了有效期而什么也得不到。

本发明实施例中,所述加密字符串的格式可以为:[验证码]_[时间戳]_[随机数]。

在字符串的后面加入几位随机数,可以避免高并发下发生重复。

其中,所述验证码的宽度根据配置设置,字符空间是阿拉伯数字和英文大小写,所述时间戳为所述加密字符串的生成时间距离1970年1月1日0时的毫秒数。

其中,验证码的宽度可以根据配置进行设置,可以设置为4位、5位或者6位,不同字段之间可以通过下划线进行分隔,例如,5Ais_1369930314548_2137。

本实施例中,S4中,所述生成所述加密字符串对应的图片,具体可以为,采用开放源代码的kaptcha验证码生成组件。

使用Java语言可以生成任何形式的图片,为了方便,本发明中使用了开放源代码的kaptcha,在现有技术中,该组件可以用来生成验证码,本发明中仅使用其生成验证码图片的功能,再加上一些字符旋转代码。

本发明实施例中,S1中,所述生成加密字符串,具体可以为,采用XXTEA的加密算法,并在加密之后进行Base64编码。

XXTEA算法非常简洁高效,运算速度快,是一种实用的对称加密算法。本发明中,为了保证加密后的结果能以字符串的形式传输,在加密之后进行了Base64编码。在解密时将密文先经过Base64去编码,然后再解密。

实施例二

本发明实施例提供了一种基于缓存的验证码校验系统,包括:

客户端,用于向验证码服务器系统请求生成验证码、获取所述加密字符串对应的图片、输入所述加密字符串和所述图片的验证码以及向所述验证码服务器系统请求校验验证码;

验证码服务器系统,包括多个验证码服务器,且每个验证码服务器的功能相同,均用于接受所述客户端请求,并用于执行以下操作:生成并向所述客户端返回加密字符串,并将动态生成的数据保存至缓存服务器;对所述加密字符串进行解密,获取原始验证码内容和原始请求时间;判断所述原始请求时间与当前时间的距离是否超过缓存服务器中设置的验证码有效期;在缓存服务器的图片黑名单中查询所述加密字符串是否请求过验证码图片,生成并向所述客户端返回所述加密字符串对应的图片,并将所述加密字符串保存至缓存服务器的所述图片黑名单中;在缓存服务器的验证黑名单中查询所述加密字符串是否被验证过,抽取解密后的数据,匹配当前时间和所述原始请求时间,如果时间尚在有效期内,则匹配用户输入的验证码和所述原始验证码内容;

缓存服务器,与所述验证码服务器系统中的每个验证码服务器数据连接,用于每个验证码服务器的数据存储和调用。

上述系统的使用过程及其功能可以参见实施例一中的描述。

通过采用本发明公开的上述技术方案,得到了如下有益的效果:本发明实施例提供了一种基于缓存的验证码校验方法和系统,通过将多个验证码服务器分别与缓存服务器数据连接,实现了多个验证码服务器之间可以通过缓存服务器发生数据交互,从而,对于包括多个验证码服务器的系统而言,客户端请求生成字符串、验证码图片和校验等过程,均可以随机由任意一个验证码服务器来执行,无需在多个验证码服务器之间共享session,在增加验证码服务器提供服务的同时,不会显著增加额外的网络开销,而且可以与其他系统配合,将客户端的请求均匀的分布到各个验证码服务器中,不会造成验证码服务器过忙或过闲的情况,实现资源的充分利用。

本说明书中的各个实施例均采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似的部分互相参见即可。

本领域人员应该理解的是,上述实施例提供的方法步骤的时序可根据实际情况进行适应性调整,也可根据实际情况并发进行。

上述实施例涉及的方法中的全部或部分步骤可以通过程序来指令相关的硬件来完成,所述的程序可以存储于计算机设备可读取的存储介质中,用于执行上述各实施例方法所述的全部或部分步骤。所述计算机设备,例如:个人计算机、服务器、网络设备、智能移动终端、智能家居设备、穿戴式智能设备、车载智能设备等;所述的存储介质,例如:RAM、ROM、磁碟、磁带、光盘、闪存、U盘、移动硬盘、存储卡、记忆棒、网络服务器存储、网络云存储等。

最后,还需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、商品或者设备中还存在另外的相同要素。

以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视本发明的保护范围。

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