王小東 孫永生
摘要:簡單討論了驗證碼的作用、基本形式和原理。并通過源代碼較詳細地分析了圖片驗證碼的ASP實現過程。
關鍵詞:驗證碼圖片驗證碼ASP
中圖分類號TP311.1文獻標識碼B文章編號:1002-2422(2007)03-010-02
驗證碼是表單驗證的一種重要形式,是當前許多表單網頁的基本功能。本文對驗證碼的作用、基本形式和原理進行討論,并且結合圖片驗證碼的實現,分別對其在服務器端實現和客戶端的實現進行詳細的分析。
1驗證碼的作用
(1)防止使用特定破解程序進行不斷的非法登陸嘗試,如:發送垃圾郵件或通過同時反復登錄多個帳戶延緩、阻塞甚至使某個Web應用崩潰。
(2)防止非法批量注冊,生成大量垃圾帳戶。
(3)防止利用機器人非法向BBS等Web應用灌水,提交垃圾數據。
(4)培養用戶謹慎、負責的操作態度。
2驗證碼的基本形式
(1)純數字形式驗證碼,由于防范能力弱,目前基本不再使用。
(2)預先準備圖片,隨機調用生成圖片驗證碼。少數站點使用。本文主要討論這種方式。
(3)完全由程序隨機生成某種序列圖片,如:數字、字符甚至漢字,并加入干擾像素。防止OCR識別,僅僅滿足用戶肉眼識別圖片的驗證碼信息,大多數站點使用。
3圖片驗證碼兩種實現方式的原理
3.1服務器驗證方式
用戶在進入登陸頁時(index.asp),頁面程序按照一定算法生成一組數據。并存儲到Sesssion變量中以便提交后驗證比較,然后編成合理的HTML字符串用Response.Write寫入,形成頁面顯示的與Sesssion變量數據對應的圖片排列,即:圖片驗證碼。
用戶提交頁面后,交與后臺驗證程序(check,asp)并與存儲的Sesssion變量進行驗證比較,成功和失敗分別進行不同處理和引導。
3.2客戶端驗證方式
該驗證方式在網頁提交到后臺之前通過客戶端腳本驗證。生成驗證碼圖片與上面的方法相同,但不在服務器端存儲驗證數據,而是通過寫入一段客戶端腳本驗證代碼,并在代碼中嵌入驗證數據從而進行驗證比較,驗證成功后順利提交,驗證失敗則要重新填寫。
4圖片驗證碼的兩種實現方式
4.1服務器端驗證實現(兩個文件:index.asp和cheek.asp)
(1)index.asp,登陸(表單)頁面形成頁面顯示的與Session變量數據對應的圖片排列,即:圖片驗證碼

5說明
(1)本例調試環境:Windows XP Professional spl,IIS5.1,記事本。
(2)本例使用10副圖片:0.gif,1.gif ,1.gif,…,9.gif,并注意存儲路徑。
(3)客戶端驗證的安全性能很低,但簡單、輕便、快捷,服務器端驗證安全性高,但需要網絡流量消耗、服務器資源消耗,并有時間延遲。在實際應用中,應該把兩種方式的驗證有機結合起來,以實現最佳功能和最高效率。