一般而言我們在網(wǎng)站制作中為了安全起見(jiàn),都會(huì )在網(wǎng)站后臺登陸和網(wǎng)站注冊界面加驗證碼功能,那么我們經(jīng)常用到的網(wǎng)站驗證碼是不是就是絕對安全的呢,下面小編就分析一下我們經(jīng)常用到的驗證碼的幾個(gè)漏洞。
一般來(lái)說(shuō),我們會(huì )把驗證碼的值用Session存儲起來(lái),通過(guò)對比用戶(hù)提交的驗證碼和Session中的驗證碼,就可以知道輸入是否正確。由于Session會(huì )占用服務(wù)器資源,我曾經(jīng)想過(guò)是否可以把驗證碼的值加密后存儲在Cookie中。不過(guò)事實(shí)證明,這只是異想天開(kāi)罷了。
假設驗證碼的值是a,通過(guò)sha1加密后得到的值為b = sha1(a),并且把b存儲在Cookie中。而用戶(hù)提交的驗證碼值為c,通過(guò)判斷sha1(c)是否與b相等,可以知道輸入的驗證碼是否正確。然而,Cookie是受客戶(hù)端控制的。如果用戶(hù)事先通過(guò)肉眼看到驗證碼的值是a,又從Cookie中得知此時(shí)的加密值為b,那么,他只要在提交前把Cookie的值修改為b,提交的驗證碼值為a,就可以永遠通過(guò)驗證。
這種情況可以直接用代碼來(lái)說(shuō)明:
if (Request["captcha"] == Session["captcha"] as string) { // 驗證通過(guò),繼續操作 }
假設用戶(hù)繞過(guò)了系統提供的表單直接提交數據,此時(shí)驗證碼還沒(méi)生成,Session["captcha"]為空。用戶(hù)不提交驗證碼時(shí),Request["captcha"]也為空。于是,驗證通過(guò)了。
要解決這個(gè)問(wèn)題,其實(shí)只要加個(gè)非空判斷就可以了:
if (!String.IsNullOrEmpty(Request["captcha"]) && Request["captcha"] == Session["captcha"] as string) { // 驗證通過(guò),繼續操作 }
使用驗證碼要遵循一個(gè)原則,在一次比對之后,無(wú)論用戶(hù)輸入正確與否,都要立刻將驗證碼銷(xiāo)毀。
如果不這樣做,就可以出現以下情況:
以上是仟億科技小編總結的關(guān)于網(wǎng)站驗證碼幾個(gè)常見(jiàn)漏洞的,如果那里有說(shuō)的不完善的地方可以自己補充。
Copyright@ 2011-2016 版權所有:大連千億科技有限公司 遼ICP備11013762-3號 google網(wǎng)站地圖 百度網(wǎng)站地圖 網(wǎng)站地圖
公司地址:大連市沙河口區中山路692號辰熙星海國際2317 客服電話(huà):0411-39943997 QQ:2088827823 37482752
法律聲明:未經(jīng)許可,任何模仿本站模板、轉載本站內容等行為者,本站保留追究其法律責任的權利! 隱私權政策聲明