蔺佳哲,王茜,谢楠(空军勤务学院.航空弹药系;.航空四站系,江苏徐州221000)
基于WEB开发技术的新型验证码的设计研究
蔺佳哲a,王茜a,谢楠b
(空军勤务学院a.航空弹药系;b.航空四站系,江苏徐州221000)
为了防止非法用户利用恶意代码重复登录网站,采用WEB开发技术设计一种拉伸汉字的图形验证码,同时在不影响用户识别的基础上,增加背景干扰.在Apache服务器上的运行结果表明,该图形验证码能够有效地阻止非法用户的攻击,提高了网络系统的安全性.
验证码;WEB开发;PHP;网络安全
验证码最早是在2002年由卡内基梅隆大学的Luis Von Ahn、Manuel Blum、Nicholas J.Hopper以及IBM的John Langford所提出[1],是一种区分用户是计算机还是人的公共全自动程序,简称图灵测试.验证码通常是由计算机生成的一种验证方式,一般只有用户才可以填写并且提交.
验证码通常被用于防止批量注册,也能够有效防止黑客针对某个注册用户通过特定程序暴力破解方式进行不断的登陆尝试.目前不少网站为了防止用户利用机器人自动注册、登录、灌水,都采用了验证码技术;在一些贴吧中,未登录发贴需要输入验证码,也是为了防止大规模匿名回帖的发生.现今一般注册用户ID的网站以及各大论坛都需要输入验证码,已经成为很多网站中通用的方式[2].
1.1验证码技术最新现状
随着计算机技术和网络开发技术的迅速发展,涌现出大量的新型验证码的生成算法,笔者筛选几类有代表性的验证码如下.
1.1.1基于FusionCharts的图形验证码
采用新的验证码生成算法,使其字符个数、字符出现的位置都是不固定的,结合FusionCharts技术予以实现.其主要特点为原始图片不包含任何验证码信息,需要结合鼠标事件才能获取有效的验证码.实验证明,采用该方法可以大幅提高验证码的可靠性、健壮性、易用性,并且FusionCharts图形界面友好,增强了用户体验,最终提高Web安全性[3].
1.1.2基于共振峰合成和韵律调整的语音验证码
基于共振峰合成、修改时长和调节韵律的随机语音验证码生成方法,可以提高语音验证技术的有效性.选择音素作为语音合成单元,基于规则在合成过程中设定随机语速参数,以及调整单元之间的连接规则来实现韵律的随机调整,使得语速和韵律具有不确定性和不可预测性,从而有效降低了自动语音识别技术(ASR)对语音码的识别率,增强了语音验证码的抗攻击性.合成的语音验证码的人耳识别率达到了90%左右,ASR的识别率为28.8%,语音码的可懂度和清晰度达到了满意的效果[4].
1.1.3基于多形变特征的汉字验证码
运用Java Beans技术,随机产生汉字字符,同时将汉字字符进行形变和粘连处理,生成的验证码具有很强的可用性.这种验证码具有更高的安全性,能有效地加强攻击者对此进行破解的难度,易于用户使用[5].
1.1.4动态验证码技术
动态验证码是指验证码系统给验证者呈现一个交互过程,通过交互过程动态地验证验证者的一种验证码.例如,验证码系统先随机产生X=10,Y=20,Z=30,让验证者确认后,再随机地产生一个表达式(X+Y)×Z,要求验证者回答该表达式的值.再例如,验证码的本质是区别人和计算机,因此,可以设计基于用户行为方式的验证码;也可在用户界面上显示一个动态随机变化位置的信息,要求用户点击该信息等方式[6].
1.2识别技术最新现状
针对一般的数字字母组合的验证码,使用基于粗匹配的序贯相似性检测匹配算法,验证码破解成功率可以达到85%,平均破解一张数字字母组合的验证码图片所需的时间为3.5S,远优于同类算法[7].针对粘连扭曲字符验证码识别方法.首先通过DENSE SIFT特征匹配获得匹配点集,再通过RANSAC算法获得匹配信息,最后采用队列式分析算法得出识别结果[8].
现阶段的验证码在防破解的方面进行了很多有益的改进,笔者认为设计汉字验证码,从识别技术的根源上增加难度,同时不影响用户的识别,可以更为有效地防止验证码被识别,也降低了设计成本.
验证码是随机产生的字符串,由web服务器生成.服务器生成验证码后将字符串保存在回话Session中,同时发送给浏览器显示.用户将用户名、密码和验证码一并提交给服务器.服务器在验证用户名和密码的过程中,同时比较用户提交的验证码与Session中保存的验证码是否一致,如果一致,用户登录正常通过,否则返回到登录界面[9].具体的原理如图1所示.
图1 验证码原理图
2.1结合Session技术生成汉字验证码
Session技术属于服务器端的技术,因此在设计开发验证码时,需要正确配置Apache服务器.然后利用配置文件的相关设置,将Apache与PHP 5.3.5进行绑定,搭建简易的WEB开发环境.
遵循PHP中Session编程的语法规则,启动Session文件,随机生成验证码,然后将验证码存入到Session文件中,具体的代码如下:
session_start();
header("Content-type:image/PNG");
getCode(4,150,50);
function getCode($num,$w,$h){
$w=$w;
$h=$h;
$fontface="STCAIYUN.TTF";
$str="阿啊哀唉挨哎埃矮蔼爱碍艾隘安氨庵鞍岸按案暗俺肮昂凹熬袄傲奥拗澳懊(此处省略)";
$str=iconv('utf-8','gbk',$str);
$code="";
for($i=0;$i<$num;$i++){
$Xi=mt_rand(0,strlen($str)/2);
if($Xi%2)$Xi+=1;
$code.=substr($str,$Xi,2);
}
$_SESSION['code']=$code;
2.2背景干扰的设计
为了增加验证码的安全性,提高防识别能力,需要设计背景干扰.在汉字验证码图片上,增加随机个数随机颜色的曲线和原点,注意在使用PHP绘图函数之前,一定要检验GD库是否加载成功,具体的设置在php. ini中查看.设计背景干扰的代码如下:
$im=imagecreatetruecolor($w,$h);
$bkcolor=imagecolorallocate($im,250,250,250);
imagefill($im,0,0,$bkcolor);
for($i=0;$i<15;$i++){
$fontcolor=imagecolorallocate($im,mt_rand(0,255),mt_rand(0,255),mt_rand(0,255));
imagearc($im,m t_rand(-10,$w),m t_rand(-10,$h),mt_rand(30,300),m t_rand(20,200),55,44,
$fontcolor);
}
for($i=0;$i<255;$i++){
$fontcolor=imagecolorallocate($im,mt_rand(0,255),m t_rand(0,255),m t_rand(0,255));
imagesetpixel($im,mt_rand(0,$w),mt_rand(0,$h),$fontcolor);
}
2.3汉字拉伸的设计
生成验证码的时候,主要利用imagettftext用TrueType字体向图像写入文本.写入时,可以设置写入文本的字体尺寸、字体旋转的角度大小、字体的位置(XY坐标)以及字体的颜色等等,为了实现汉字拉伸的效果,将产生的随机汉字验证码在不同旋转角度进行输出显示,具体的代码如下:
$im=imagecreatetruecolor($w,$h);
$bkcolor=imagecolorallocate($im,250,250,250);
imagefill($im,0,0,$bkcolor);
for($i=0;$i<4;$i++){
$fontcolor=imagecolorallocate($im,mt_rand(0,120),mt_rand(0,120),mt_rand(0,120));
$codex=iconv("GB2312","UTF-8",substr($code,$i*2,2));
$size=mt_rand(14,18);
$angle=mt_rand(-60,60);$x=30*$i+20;
$y=mt_rand(30,35);
imagettftext($im,$size,$angle,$x,$y,$fontcolor,$fontface,$codex);
imagettftext($im,$size,$angle+mt_rand(-5,5),$x,$y,$fontcolor,$fontface,$codex);
}
imagepng($im);
imagedestroy($im);
利用编写的代码在搭建的Apache服务器中运行,如图2所示,摘取运行得到的四张验证码图像,从图中可以看出,该验证码用户体验较好,在不影响用户正常识别的基础之上,增加了自动识别的难度,可以有效地提高验证码的可靠性和安全性.
图2 生成的验证码图像
现代网络世界中,不法分子利用黑客技术对各类网站进行破坏和干扰.利用验证码技术可以有效地防止登录网站被恶意攻击,提高网站的安全性.笔者设计的验证码满足网站登录界面的设计需求,在防识别方面优于其它验证码技术.
当然,单单利用验证码技术是远远不够的,现在很多网站利用口令加密的方式[10],实现用户密码的加密,提高用户信息的安全保障能力.本设计中,也可以利用PHP支持的MD5算法类进行加密处理,结合设计的汉字验证码,进一步提升网站的安全性.
[1]刘明明.基于Java web的中文验证码的设计与实现[J].消费电子,2014,(10):175-176.
[2]贾默然,高永兵.PHP图片验证码的实现[J].包钢科技,2010,(1):59-60.
[3]李建迎.基于FusionCharts的图形验证码的研究与实现[J].计算机应用与软件,2014,31(8):327-329.
[4]汪成亮,张玉维.基于共振峰合成和韵律调整的语音验证码方法研究[J].计算机应用研究,2011,28(7):2 458-2 461.
[5]戴如意,艾丽蓉,高海昌.基于多形变特征的汉字验证码的设计及实现[J].计算机应用研究,2010(4):1 508-1 510.
[6]王斌君,王靖亚,杜凯选,等.验证码技术的攻防对策研究[J].计算机应用研究,2013,30(9):2 776-2 779.
[7]高海昌,樊晔,王伟.利用旋转归一化和粗匹配算法破解验证码[J].西安电子科技大学学报,2012,39(6):78-83.
[8]尹龙,尹东,张荣,等.一种扭曲粘连字符验证码识别方法[J].模式识别与人工智能,2014,27(3):235-241.
[9]刘红坤.使用PHP实现图片验证码的方法[J].计算机时代,2011,(11):13-14.
[10]王振辉.一种安全登录子系统的设计与实现[J].科学技术与工程,2012,20(22):5 624-5 629.
(责任编辑李健飞)
Key works:verification code;WEB development;PHP;network security
The Design of New Authentication Code Based on Technology of WEB Development
LIN Jia-zhe1,WANG Qian1,XIE Nan2
(1.Dept.of Aviation Ammunition;2.Dept.of No.Four Aviation Station,Air Force Logistics College,Xuzhou,Jiangsu 221000,China)
By using the WEB development technology,this paper designs a graphical verification code of the drawing characters to prevent illegal users'duplication of website by malicious code.Without affecting the user identification,the graphical verification is combined with some background interference. The Apache server running results show that the graphical verification code can effectively prevent illegal users'attack,improving the security of the network system.
TP393.08
A
1673-1972(2016)03-0038-04
2016-02-26
蔺佳哲(1991-),男,河北张家口人,硕士研究生,主要从事机载弹药技术维护研究.