一、问题背景
为了防止垃圾信息发布机器人的自动提交攻击,采用CAPTCHA验证码来保护该模块,提高攻击者的成本。
二、验证码简介
全自动区分计算机和人类的图灵测试(Completely Automated Public Turing test to tell Computers and Humans Apart,简称CAPTCHA)俗称验证码,是一种区分用户是计算机和人的公共全自动程序。在CAPTCHA测试中,作为服务器的计算机会自动生成一个问题由用户来解答。这个问题可以由计算机生成并评判,但是必须只有人类才能解答。由于计算机无法解答CAPTCHA的问题,所以回答出问题的用户就可以被认为是人类。
验证码作为一种辅助安全手段在Web安全中有着特殊的地位,验证码安全和web应用中的众多漏洞相比似乎微不足道,但是千里之堤毁于蚁穴,有些时候如果能绕过验证码,则可以把手动变为自动,对于Web安全检测有很大的帮助。大部分验证码的设计者都不知道为什么要用到验证码,或者对于如何检验验证码的强度没有任何概念。大多数验证码在实现的时候只是把文字印到背景稍微复杂点的图片上就完事了,程序员没有从根本上了解验证码的设计理念。
JCaptcha即为Java版本的CAPTCHA项目,其是一个开源项目,支持生成图形和声音版的验证码,声音版的验证码需要使用到FreeTTS。
其原理是:服务器端首先随机产生一个字符串,生成一个图片,在后台存储一份。在做验证的时候,通过在后台传进去request参数获取到后台存储的值与输入的值进行比对。基于Servlet的使用方式可以参考官网的tutorial( https://jcaptcha.atlassian.net/wiki/display/general/5+minutes+application+integration+tutorial)
JCaptcha的架构图如下所示:
三、问题分析
JCaptcha默认的实现是基于单机模式(MapCaptchaStore存储信息单机HashMap中),为了适应集群环境可以把验证信息存储在session中,但是要求Web服务器配置session stick或者Session复制。为了实现负载均衡且避免session复制带来的性能损失,集群部署方案是完全分布式的,既不是session stick也不进行session复制。进行验证时,由A节点到B节点进行验证,B节点CaptchaStore中store中得不到当前验证码,无法进行验证。
由上可知,如果把验证码统一存储在一个地方,问题将迎刃而解,故考虑自定义CaptchaStore采用memcache来存储,如下图所示:
四、具体实施
1)在pom.xml加入依赖:
2)JCaptcha与Spring集成配置
applicationContext.xml:
3)定制CaptchaStore
4)定制验证码Engine
5)生成验证码图片
6)验证过程
相关推荐
tomcat+nginx+memcache高可用
Nginx+Memcache+Tomcat集群(session共享),本人亲测成功!Nginx+Memcache+Tomcat集群(session共享),本人亲测成功!
Nginx+Memcache+Linux+Tomcat搭建的集群,大神勿喷
经过测试,此套jar包是为配置sesion共享所需要的memcache-session-manager有关jar包,其中memcache版本2.4.1,Nginx版本1.4.7
基于nginx+tomcat+memcache的负载均衡架构
Windows_Memcache安装(XAMPP+Memcache+PHP) 安装步骤,详细说明
CentOS Minimal LNMP + Memcache 编译安装过程 CentOS Minimal LNMP + Memcache 编译安装过程
apache+tomcat+memcache集群部署加缓存文档
一 安装 1 jdk安装及tomcat7解压缩安装配置 不用说明 2 下载nginx1 4 2 for win32 解压安装 3 下载memcached服务端for win32 解压安装 设成windows服务端 执行memcached exe d install 4 下载tomcat7对应的memcached...
Linux+nginx+php+mysql+memcache 集成化
按照实验过程编写,绝对真实实用。如假包换!童叟无欺!
tomcat+nginx+memcache+session 所需jar包,包括memcache等安装包
Lnmp+memcache+memcached
Nginx0.8.54 + PHP5.3.4 +memcache
mysql 太大 我给删掉了, PHP 5.5.10自己 一直用 ,不喜欢集成环境的朋友可以下载安装,还有memcacheadmin。
傻瓜式安装nginx+php+mysql+memcache+mongodb
windows环境下nginx+php+memcache一步到位配置包
Windows 2008R2+IIS7.5+PHP+Mysql+Wincache+Memcache+URL伪静态环境搭建教程
Linux+nginx+php+mysql+memcache服务器安装,配置与优化
构架Nginx+PHP(Fastcgi)+MySQL+Memcache高性能web服务器