ASP.NET驗證碼技術(shù)
為了讓大家更深入的了解和使用C#,我們將開始這一系列的主題為“C#發(fā)現(xiàn)之旅”的技術(shù)講座。考慮到各位大多是進行WEB數(shù)據(jù)庫開發(fā)的,而所謂發(fā)現(xiàn)是發(fā)現(xiàn)我們所不熟悉的領(lǐng)域,因此本系列講座內(nèi)容將是C#在WEB數(shù)據(jù)庫開發(fā)以外的應(yīng)用。目前規(guī)劃的主要內(nèi)容是圖形開發(fā)和XML開發(fā),并計劃編排了多個課程。在未來的C#發(fā)現(xiàn)之旅中,我們按照由淺入深,循序漸進的步驟,一起探索和發(fā)現(xiàn)C#的其他未知的領(lǐng)域,更深入的理解和掌握使用C#進行軟件開發(fā),拓寬我們的視野,增強我們的軟件開發(fā)綜合能力。
我們針對驗證碼技術(shù)深入的了解圖形編程在ASP.NET中的應(yīng)用。
驗證碼技術(shù)是目前很多WEB程序采用的一種防御技術(shù)。系統(tǒng)在登錄的時候不但要輸出用戶名和密碼,還要額外輸入一種隨機生成的驗證碼文本,此時用戶需要正確的輸入這三個信息才能登錄到系統(tǒng)中。
由于驗證碼技術(shù)能有效的抵御某些黑客攻擊,因此得到相當廣泛的應(yīng)用,而且在一些C/S系統(tǒng)中也采用了這種源自WEB開發(fā)的技術(shù)。
驗證碼原理
在現(xiàn)在的軟件運行環(huán)境下,成為大部分軟件必須考慮的問題,黑客無處不在,攻擊方式日益豐富,尤其是WEB系統(tǒng)由于其開放性更是遇到嚴峻的考驗,黑客事件層出不窮,造成的損失和影響也不斷變大,對此我們軟件開發(fā)人員需要對此有相當?shù)恼J識并采取措施抵御各種黑客攻擊。
枚舉字典攻擊
在各種黑客攻擊中,很常見的是套取用戶名和密碼,其中很多是采用枚舉字典的方式來不斷的測試用戶名和密碼。
比如某黑客獲得一銀行賬號,然后打開賬號的開戶銀行的網(wǎng)上銀行登錄界面。分析其中的HTML代碼,發(fā)現(xiàn)其頁面粗制濫造,沒有驗證碼,沒有任何控制,只要求輸入銀行賬號和取款密碼可以登錄。黑客心中大喜,馬上寫了一個程序,直接調(diào)用HTTP協(xié)議,使用程序來模擬瀏覽器向網(wǎng)上銀行服務(wù)器提交賬號和密碼嘗試登錄。由于取款密碼是6位阿拉伯數(shù)字,因此也有一百萬種組合,黑客的電腦從六個零開始測試一直到六個九,這一定會測試出真正的密碼。黑客找到一臺寬帶高速上網(wǎng)的電腦,運行套取取款密碼程序后忙其他事了,假設(shè)這臺電腦1秒能測試10個密碼,于是花費10萬秒的時間肯定能找到密碼。10萬秒也是27小時,多點的時間,實際上很可能用不了那么長的時間。黑客外頭轉(zhuǎn)了一圈回來,發(fā)現(xiàn)密碼已經(jīng)找到了,于是馬上登錄網(wǎng)上銀行撈錢,或者偽造一個銀行卡去ATM機上提取現(xiàn)金。也是說黑客最多花了時間即可獲得數(shù)目不可預(yù)知的非法收入。
驗證碼防御
網(wǎng)上銀行可以有很多手段來抵御黑客攻擊,比如使用ActiveX控件代替標準的文本框來輸入賬號和密碼,可以使用USB接口的密碼盤來進行數(shù)據(jù)加密和檢測,或者使用一個客戶端程序代替瀏覽器來登錄網(wǎng)上銀行。但這些是客戶端技術(shù),千千萬萬的黑客可以操著各種手術(shù)刀來解剖這些技術(shù),從根本上說客戶端技術(shù)是不可靠的。
相對而言采用服務(wù)器端技術(shù)比較了。比如發(fā)現(xiàn)密碼連續(xù)錯誤3次即鎖定賬戶,1天后才能登錄;也可以使用驗證碼技術(shù)來很大程度的抵御枚舉字典套取密碼的攻擊。
現(xiàn)有一個新的網(wǎng)上銀行,和舊網(wǎng)銀差不多,但采用了驗證碼技術(shù),用戶登錄時除了要輸入賬號和取款密碼,瀏覽器還顯示一個圖片,里面顯示了一些潦草的字符,用戶需要辨認這些字符然后再輸入進去,瀏覽器向服務(wù)器提交表單時會附加用戶輸入的驗證碼,服務(wù)器接受表單數(shù)據(jù)后除了校驗賬號和取款密碼后,還要檢查驗證碼是否輸入正確,若登錄信息校驗失敗,則服務(wù)器端則會提示重新登錄,而且還生成包含隨機內(nèi)容的新的驗證碼,用戶在次登錄時又得重新識別新的驗證碼了。
由于正確的驗證碼文本是保存在服務(wù)器上的,客戶端的黑客程序不可能獲得,驗證碼的內(nèi)容是隨機的,黑客程序也無法找到規(guī)律,只能辨認從服務(wù)器端發(fā)出的包含驗證碼的圖片來獲得驗證碼。這里體現(xiàn)了電腦和人腦的差別了,人腦在圖形識別方面遠遠超過了目前的電腦,服務(wù)器端使用一些技術(shù)生成的書寫潦草,充滿隨機分布的雜點的圖片,人腦是可以相當容易的識別的,但目前的電腦是難以識別的。黑客程序無法識別驗證碼,只能顯示圖片讓黑客親自辨認,這時每測試一次密碼,黑客都得仔細辨認一下驗證碼圖片,然后手工輸入驗證碼文本。最多要輸入一百萬次,估計全世界沒人會愿意進行這樣的工作。這樣驗證碼技術(shù)有效的抵御了這種枚舉字典測試密碼的攻擊。此時黑客會轉(zhuǎn)而尋找其他方法,而大量的初級黑客會放棄攻擊這個網(wǎng)站。