藺佳哲,王茜,謝楠(空軍勤務(wù)學(xué)院.航空彈藥系;.航空四站系,江蘇徐州221000)
?
基于WEB開(kāi)發(fā)技術(shù)的新型驗(yàn)證碼的設(shè)計(jì)研究
藺佳哲a,王茜a,謝楠b
(空軍勤務(wù)學(xué)院a.航空彈藥系;b.航空四站系,江蘇徐州221000)
為了防止非法用戶利用惡意代碼重復(fù)登錄網(wǎng)站,采用WEB開(kāi)發(fā)技術(shù)設(shè)計(jì)一種拉伸漢字的圖形驗(yàn)證碼,同時(shí)在不影響用戶識(shí)別的基礎(chǔ)上,增加背景干擾.在Apache服務(wù)器上的運(yùn)行結(jié)果表明,該圖形驗(yàn)證碼能夠有效地阻止非法用戶的攻擊,提高了網(wǎng)絡(luò)系統(tǒng)的安全性.
驗(yàn)證碼;WEB開(kāi)發(fā);PHP;網(wǎng)絡(luò)安全
驗(yàn)證碼最早是在2002年由卡內(nèi)基梅隆大學(xué)的Luis Von Ahn、Manuel Blum、Nicholas J.Hopper以及IBM的John Langford所提出[1],是一種區(qū)分用戶是計(jì)算機(jī)還是人的公共全自動(dòng)程序,簡(jiǎn)稱圖靈測(cè)試.驗(yàn)證碼通常是由計(jì)算機(jī)生成的一種驗(yàn)證方式,一般只有用戶才可以填寫并且提交.
驗(yàn)證碼通常被用于防止批量注冊(cè),也能夠有效防止黑客針對(duì)某個(gè)注冊(cè)用戶通過(guò)特定程序暴力破解方式進(jìn)行不斷的登陸嘗試.目前不少網(wǎng)站為了防止用戶利用機(jī)器人自動(dòng)注冊(cè)、登錄、灌水,都采用了驗(yàn)證碼技術(shù);在一些貼吧中,未登錄發(fā)貼需要輸入驗(yàn)證碼,也是為了防止大規(guī)模匿名回帖的發(fā)生.現(xiàn)今一般注冊(cè)用戶ID的網(wǎng)站以及各大論壇都需要輸入驗(yàn)證碼,已經(jīng)成為很多網(wǎng)站中通用的方式[2].
1.1驗(yàn)證碼技術(shù)最新現(xiàn)狀
隨著計(jì)算機(jī)技術(shù)和網(wǎng)絡(luò)開(kāi)發(fā)技術(shù)的迅速發(fā)展,涌現(xiàn)出大量的新型驗(yàn)證碼的生成算法,筆者篩選幾類有代表性的驗(yàn)證碼如下.
1.1.1基于FusionCharts的圖形驗(yàn)證碼
采用新的驗(yàn)證碼生成算法,使其字符個(gè)數(shù)、字符出現(xiàn)的位置都是不固定的,結(jié)合FusionCharts技術(shù)予以實(shí)現(xiàn).其主要特點(diǎn)為原始圖片不包含任何驗(yàn)證碼信息,需要結(jié)合鼠標(biāo)事件才能獲取有效的驗(yàn)證碼.實(shí)驗(yàn)證明,采用該方法可以大幅提高驗(yàn)證碼的可靠性、健壯性、易用性,并且FusionCharts圖形界面友好,增強(qiáng)了用戶體驗(yàn),最終提高Web安全性[3].
1.1.2基于共振峰合成和韻律調(diào)整的語(yǔ)音驗(yàn)證碼
基于共振峰合成、修改時(shí)長(zhǎng)和調(diào)節(jié)韻律的隨機(jī)語(yǔ)音驗(yàn)證碼生成方法,可以提高語(yǔ)音驗(yàn)證技術(shù)的有效性.選擇音素作為語(yǔ)音合成單元,基于規(guī)則在合成過(guò)程中設(shè)定隨機(jī)語(yǔ)速參數(shù),以及調(diào)整單元之間的連接規(guī)則來(lái)實(shí)現(xiàn)韻律的隨機(jī)調(diào)整,使得語(yǔ)速和韻律具有不確定性和不可預(yù)測(cè)性,從而有效降低了自動(dòng)語(yǔ)音識(shí)別技術(shù)(ASR)對(duì)語(yǔ)音碼的識(shí)別率,增強(qiáng)了語(yǔ)音驗(yàn)證碼的抗攻擊性.合成的語(yǔ)音驗(yàn)證碼的人耳識(shí)別率達(dá)到了90%左右,ASR的識(shí)別率為28.8%,語(yǔ)音碼的可懂度和清晰度達(dá)到了滿意的效果[4].
1.1.3基于多形變特征的漢字驗(yàn)證碼
運(yùn)用Java Beans技術(shù),隨機(jī)產(chǎn)生漢字字符,同時(shí)將漢字字符進(jìn)行形變和粘連處理,生成的驗(yàn)證碼具有很強(qiáng)的可用性.這種驗(yàn)證碼具有更高的安全性,能有效地加強(qiáng)攻擊者對(duì)此進(jìn)行破解的難度,易于用戶使用[5].
1.1.4動(dòng)態(tài)驗(yàn)證碼技術(shù)
動(dòng)態(tài)驗(yàn)證碼是指驗(yàn)證碼系統(tǒng)給驗(yàn)證者呈現(xiàn)一個(gè)交互過(guò)程,通過(guò)交互過(guò)程動(dòng)態(tài)地驗(yàn)證驗(yàn)證者的一種驗(yàn)證碼.例如,驗(yàn)證碼系統(tǒng)先隨機(jī)產(chǎn)生X=10,Y=20,Z=30,讓驗(yàn)證者確認(rèn)后,再隨機(jī)地產(chǎn)生一個(gè)表達(dá)式(X+Y)×Z,要求驗(yàn)證者回答該表達(dá)式的值.再例如,驗(yàn)證碼的本質(zhì)是區(qū)別人和計(jì)算機(jī),因此,可以設(shè)計(jì)基于用戶行為方式的驗(yàn)證碼;也可在用戶界面上顯示一個(gè)動(dòng)態(tài)隨機(jī)變化位置的信息,要求用戶點(diǎn)擊該信息等方式[6].
1.2識(shí)別技術(shù)最新現(xiàn)狀
針對(duì)一般的數(shù)字字母組合的驗(yàn)證碼,使用基于粗匹配的序貫相似性檢測(cè)匹配算法,驗(yàn)證碼破解成功率可以達(dá)到85%,平均破解一張數(shù)字字母組合的驗(yàn)證碼圖片所需的時(shí)間為3.5S,遠(yuǎn)優(yōu)于同類算法[7].針對(duì)粘連扭曲字符驗(yàn)證碼識(shí)別方法.首先通過(guò)DENSE SIFT特征匹配獲得匹配點(diǎn)集,再通過(guò)RANSAC算法獲得匹配信息,最后采用隊(duì)列式分析算法得出識(shí)別結(jié)果[8].
現(xiàn)階段的驗(yàn)證碼在防破解的方面進(jìn)行了很多有益的改進(jìn),筆者認(rèn)為設(shè)計(jì)漢字驗(yàn)證碼,從識(shí)別技術(shù)的根源上增加難度,同時(shí)不影響用戶的識(shí)別,可以更為有效地防止驗(yàn)證碼被識(shí)別,也降低了設(shè)計(jì)成本.
驗(yàn)證碼是隨機(jī)產(chǎn)生的字符串,由web服務(wù)器生成.服務(wù)器生成驗(yàn)證碼后將字符串保存在回話Session中,同時(shí)發(fā)送給瀏覽器顯示.用戶將用戶名、密碼和驗(yàn)證碼一并提交給服務(wù)器.服務(wù)器在驗(yàn)證用戶名和密碼的過(guò)程中,同時(shí)比較用戶提交的驗(yàn)證碼與Session中保存的驗(yàn)證碼是否一致,如果一致,用戶登錄正常通過(guò),否則返回到登錄界面[9].具體的原理如圖1所示.
圖1 驗(yàn)證碼原理圖
2.1結(jié)合Session技術(shù)生成漢字驗(yàn)證碼
Session技術(shù)屬于服務(wù)器端的技術(shù),因此在設(shè)計(jì)開(kāi)發(fā)驗(yàn)證碼時(shí),需要正確配置Apache服務(wù)器.然后利用配置文件的相關(guān)設(shè)置,將Apache與PHP 5.3.5進(jìn)行綁定,搭建簡(jiǎn)易的WEB開(kāi)發(fā)環(huán)境.
遵循PHP中Session編程的語(yǔ)法規(guī)則,啟動(dòng)Session文件,隨機(jī)生成驗(yàn)證碼,然后將驗(yàn)證碼存入到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="阿啊哀唉挨哎埃矮藹愛(ài)礙艾隘安氨庵鞍岸按案暗俺骯昂凹熬襖傲奧拗澳懊(此處省略)";
$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背景干擾的設(shè)計(jì)
為了增加驗(yàn)證碼的安全性,提高防識(shí)別能力,需要設(shè)計(jì)背景干擾.在漢字驗(yàn)證碼圖片上,增加隨機(jī)個(gè)數(shù)隨機(jī)顏色的曲線和原點(diǎn),注意在使用PHP繪圖函數(shù)之前,一定要檢驗(yàn)GD庫(kù)是否加載成功,具體的設(shè)置在php. ini中查看.設(shè)計(jì)背景干擾的代碼如下:
$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漢字拉伸的設(shè)計(jì)
生成驗(yàn)證碼的時(shí)候,主要利用imagettftext用TrueType字體向圖像寫入文本.寫入時(shí),可以設(shè)置寫入文本的字體尺寸、字體旋轉(zhuǎn)的角度大小、字體的位置(XY坐標(biāo))以及字體的顏色等等,為了實(shí)現(xiàn)漢字拉伸的效果,將產(chǎn)生的隨機(jī)漢字驗(yàn)證碼在不同旋轉(zhuǎn)角度進(jìn)行輸出顯示,具體的代碼如下:
$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服務(wù)器中運(yùn)行,如圖2所示,摘取運(yùn)行得到的四張驗(yàn)證碼圖像,從圖中可以看出,該驗(yàn)證碼用戶體驗(yàn)較好,在不影響用戶正常識(shí)別的基礎(chǔ)之上,增加了自動(dòng)識(shí)別的難度,可以有效地提高驗(yàn)證碼的可靠性和安全性.
圖2 生成的驗(yàn)證碼圖像
現(xiàn)代網(wǎng)絡(luò)世界中,不法分子利用黑客技術(shù)對(duì)各類網(wǎng)站進(jìn)行破壞和干擾.利用驗(yàn)證碼技術(shù)可以有效地防止登錄網(wǎng)站被惡意攻擊,提高網(wǎng)站的安全性.筆者設(shè)計(jì)的驗(yàn)證碼滿足網(wǎng)站登錄界面的設(shè)計(jì)需求,在防識(shí)別方面優(yōu)于其它驗(yàn)證碼技術(shù).
當(dāng)然,單單利用驗(yàn)證碼技術(shù)是遠(yuǎn)遠(yuǎn)不夠的,現(xiàn)在很多網(wǎng)站利用口令加密的方式[10],實(shí)現(xiàn)用戶密碼的加密,提高用戶信息的安全保障能力.本設(shè)計(jì)中,也可以利用PHP支持的MD5算法類進(jìn)行加密處理,結(jié)合設(shè)計(jì)的漢字驗(yàn)證碼,進(jìn)一步提升網(wǎng)站的安全性.
[1]劉明明.基于Java web的中文驗(yàn)證碼的設(shè)計(jì)與實(shí)現(xiàn)[J].消費(fèi)電子,2014,(10):175-176.
[2]賈默然,高永兵.PHP圖片驗(yàn)證碼的實(shí)現(xiàn)[J].包鋼科技,2010,(1):59-60.
[3]李建迎.基于FusionCharts的圖形驗(yàn)證碼的研究與實(shí)現(xiàn)[J].計(jì)算機(jī)應(yīng)用與軟件,2014,31(8):327-329.
[4]汪成亮,張玉維.基于共振峰合成和韻律調(diào)整的語(yǔ)音驗(yàn)證碼方法研究[J].計(jì)算機(jī)應(yīng)用研究,2011,28(7):2 458-2 461.
[5]戴如意,艾麗蓉,高海昌.基于多形變特征的漢字驗(yàn)證碼的設(shè)計(jì)及實(shí)現(xiàn)[J].計(jì)算機(jī)應(yīng)用研究,2010(4):1 508-1 510.
[6]王斌君,王靖亞,杜凱選,等.驗(yàn)證碼技術(shù)的攻防對(duì)策研究[J].計(jì)算機(jī)應(yīng)用研究,2013,30(9):2 776-2 779.
[7]高海昌,樊曄,王偉.利用旋轉(zhuǎn)歸一化和粗匹配算法破解驗(yàn)證碼[J].西安電子科技大學(xué)學(xué)報(bào),2012,39(6):78-83.
[8]尹龍,尹東,張榮,等.一種扭曲粘連字符驗(yàn)證碼識(shí)別方法[J].模式識(shí)別與人工智能,2014,27(3):235-241.
[9]劉紅坤.使用PHP實(shí)現(xiàn)圖片驗(yàn)證碼的方法[J].計(jì)算機(jī)時(shí)代,2011,(11):13-14.
[10]王振輝.一種安全登錄子系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[J].科學(xué)技術(shù)與工程,2012,20(22):5 624-5 629.
(責(zé)任編輯李健飛)
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-),男,河北張家口人,碩士研究生,主要從事機(jī)載彈藥技術(shù)維護(hù)研究.