程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> C#發現之旅第九講 ASP.NET驗證碼技術(2)

C#發現之旅第九講 ASP.NET驗證碼技術(2)

編輯:關於C語言
證碼防御

網上銀行可以有 很多手段來抵御黑客攻擊,比如使用ActiveX控件代替標准的文本框來輸入賬號和密碼,可以 使用USB接口的密碼盤來進行數據加密和檢測,或者使用一個客戶端程序代替浏覽器來登錄網 上銀行。但這些是客戶端技術,千千萬萬的黑客可以操著各種手術刀來解剖這些技術,從根 本上說客戶端技術是不可靠的。

相對而言采用服務器端技術就比較安全了。比如發現 密碼連續錯誤3次即鎖定賬戶,1天後才能登錄;也可以使用驗證碼技術來很大程度的抵御枚 舉字典套取密碼的攻擊。

現有一個新的網上銀行,和舊網銀差不多,但采用了驗證碼 技術,用戶登錄時除了要輸入賬號和取款密碼,浏覽器還顯示一個圖片,裡面顯示了一些潦 草的字符,用戶需要辨認這些字符然後再輸入進去,浏覽器向服務器提交表單時會附加用戶 輸入的驗證碼,服務器接受表單數據後除了校驗賬號和取款密碼後,還要檢查驗證碼是否輸 入正確,若登錄信息校驗失敗,則服務器端則會提示重新登錄,而且還生成包含隨機內容的 新的驗證碼,用戶在次登錄時又得重新識別新的驗證碼了。

由於正確的驗證碼文本是 保存在服務器上的,客戶端的黑客程序不可能獲得,驗證碼的內容是隨機的,黑客程序也無 法找到規律,只能辨認從服務器端發出的包含驗證碼的圖片來獲得驗證碼。這裡就體現了電 腦和人腦的差別了,人腦在圖形識別方面遠遠超過了目前的電腦,服務器端使用一些技術生 成的書寫潦草,充滿隨機分布的雜點的圖片,人腦是可以相當容易的識別的,但目前的電腦 是難以識別的。黑客程序無法識別驗證碼,只能顯示圖片讓黑客親自辨認,這時每測試一次 密碼,黑客都得仔細辨認一下驗證碼圖片,然後手工輸入驗證碼文本。最多要輸入一百萬次 ,估計全世界沒人會願意進行這樣的工作。這樣驗證碼技術就有效的抵御了這種枚舉字典測 試密碼的安全攻擊。此時黑客會轉而尋找其他方法,而大量的初級黑客會放棄攻擊這個網站 。

驗證碼技術概念

驗證碼技術利用了人腦和電腦之間的差別。

大家 都知道電腦和人腦是存在很大的差別的,電腦很勝任數值運算和精確的邏輯判斷,很適合執 行那些重復又重復的簡單數據處理,但圖像識別,模糊邏輯判斷,學習和創新能力很差。而 人腦正好相反,數值運算不行,但圖像識別卻很擅長。

在驗證碼技術中,有一個很關 鍵的過程就是需要從一個充滿隨機形狀的圖片中辨認出驗證碼文本,這個過程目前的電腦是 難以實現的,而對人腦卻能相當容易。

采用電腦難於識別而人腦容易識別的圖片,強 迫人腦參與安全信息驗證過程,就是驗證碼技術。這裡包含驗證碼文本的圖片是驗證碼媒介 。仔細觀察,我們可以知道這種驗證碼媒介具有電腦創建容易識別難的特點,因此類似的我 們也可以采用合成語音等其他手段來作為驗證碼媒介。例如服務器提供一個類似QQ表情的圖 片,加上噪聲,然後讓用戶判斷選擇這個圖片的表情狀態,是哭是笑還是流鼻血,這樣也可 以當作驗證碼。

由於枚舉字典安全攻擊需要大數量的嘗試猜測安全信息,其重復過程 可能需要數萬甚至數億次,而驗證碼技術強迫了人腦參與每一次嘗試猜測安全信息,人腦難 以勝任長時間高頻率的簡單重復勞動,因此這就使得枚舉字典安全攻擊變得不可行,如此應 用程序成功的防御了枚舉字典安全攻擊。

ASP.Net中使用驗證碼技術

由於驗 證碼技術中服務器程序需要創建驗證碼圖片,裡面用到了圖形編程,因此本節課程仍然是C# 發現之旅的圖形編程系列教程。

根據驗證碼的原理,我們使用C#在ASP.Net中實現了 驗證碼的功能。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved