網上銀行可以有 很多手段來抵御黑客攻擊,比如使用ActiveX控件代替標准的文本框來輸入賬號和密碼,可以 使用USB接口的密碼盤來進行數據加密和檢測,或者使用一個客戶端程序代替浏覽器來登錄網 上銀行。但這些是客戶端技術,千千萬萬的黑客可以操著各種手術刀來解剖這些技術,從根 本上說客戶端技術是不可靠的。
相對而言采用服務器端技術就比較安全了。比如發現 密碼連續錯誤3次即鎖定賬戶,1天後才能登錄;也可以使用驗證碼技術來很大程度的抵御枚 舉字典套取密碼的攻擊。
現有一個新的網上銀行,和舊網銀差不多,但采用了驗證碼 技術,用戶登錄時除了要輸入賬號和取款密碼,浏覽器還顯示一個圖片,裡面顯示了一些潦 草的字符,用戶需要辨認這些字符然後再輸入進去,浏覽器向服務器提交表單時會附加用戶 輸入的驗證碼,服務器接受表單數據後除了校驗賬號和取款密碼後,還要檢查驗證碼是否輸 入正確,若登錄信息校驗失敗,則服務器端則會提示重新登錄,而且還生成包含隨機內容的 新的驗證碼,用戶在次登錄時又得重新識別新的驗證碼了。
由於正確的驗證碼文本是 保存在服務器上的,客戶端的黑客程序不可能獲得,驗證碼的內容是隨機的,黑客程序也無 法找到規律,只能辨認從服務器端發出的包含驗證碼的圖片來獲得驗證碼。這裡就體現了電 腦和人腦的差別了,人腦在圖形識別方面遠遠超過了目前的電腦,服務器端使用一些技術生 成的書寫潦草,充滿隨機分布的雜點的圖片,人腦是可以相當容易的識別的,但目前的電腦 是難以識別的。黑客程序無法識別驗證碼,只能顯示圖片讓黑客親自辨認,這時每測試一次 密碼,黑客都得仔細辨認一下驗證碼圖片,然後手工輸入驗證碼文本。最多要輸入一百萬次 ,估計全世界沒人會願意進行這樣的工作。這樣驗證碼技術就有效的抵御了這種枚舉字典測 試密碼的安全攻擊。此時黑客會轉而尋找其他方法,而大量的初級黑客會放棄攻擊這個網站 。
驗證碼技術概念
驗證碼技術利用了人腦和電腦之間的差別。
大家 都知道電腦和人腦是存在很大的差別的,電腦很勝任數值運算和精確的邏輯判斷,很適合執 行那些重復又重復的簡單數據處理,但圖像識別,模糊邏輯判斷,學習和創新能力很差。而 人腦正好相反,數值運算不行,但圖像識別卻很擅長。
在驗證碼技術中,有一個很關 鍵的過程就是需要從一個充滿隨機形狀的圖片中辨認出驗證碼文本,這個過程目前的電腦是 難以實現的,而對人腦卻能相當容易。
采用電腦難於識別而人腦容易識別的圖片,強 迫人腦參與安全信息驗證過程,就是驗證碼技術。這裡包含驗證碼文本的圖片是驗證碼媒介 。仔細觀察,我們可以知道這種驗證碼媒介具有電腦創建容易識別難的特點,因此類似的我 們也可以采用合成語音等其他手段來作為驗證碼媒介。例如服務器提供一個類似QQ表情的圖 片,加上噪聲,然後讓用戶判斷選擇這個圖片的表情狀態,是哭是笑還是流鼻血,這樣也可 以當作驗證碼。
由於枚舉字典安全攻擊需要大數量的嘗試猜測安全信息,其重復過程 可能需要數萬甚至數億次,而驗證碼技術強迫了人腦參與每一次嘗試猜測安全信息,人腦難 以勝任長時間高頻率的簡單重復勞動,因此這就使得枚舉字典安全攻擊變得不可行,如此應 用程序成功的防御了枚舉字典安全攻擊。
ASP.Net中使用驗證碼技術
由於驗 證碼技術中服務器程序需要創建驗證碼圖片,裡面用到了圖形編程,因此本節課程仍然是C# 發現之旅的圖形編程系列教程。
根據驗證碼的原理,我們使用C#在ASP.Net中實現了 驗證碼的功能。