基于ASP.NET的Web應用程序安全性的探討
目前,雖然網(wǎng)站的絕大部分資源對瀏覽者是開放的.但是有些信息則是特別針對某些用戶的,例如政府網(wǎng)、企業(yè)內(nèi)部網(wǎng)等,只有特定的用戶才能訪問。需要使用嚴密的安全機制來保護,以確定用戶訪問資源的權限。Web安全性便是為限制只有特定用戶群才能訪問某些文件而設計。
正確識別用戶身份,嚴密控制用戶對資源的訪問,是Web應用程序安全性中最重要問題,也是最基本的一環(huán)。實現(xiàn)安全操作,必須經(jīng)過驗證、授權和模擬等處理程序完成。
2 口令驗證
Web安全處理的第一步便是驗證,即對于請求信息的用戶驗證其身份。用戶使用證件表明其身份.最常用的就是用戶名和密碼。在驗證用戶身份時,若系統(tǒng)不能根據(jù)用戶的證件確定其身份,則身份驗證失敗,用戶將被拒絕訪問;若證件有效,則允許用戶進入系統(tǒng),并被賦予一個合法的已知身份。
口令驗證是根據(jù)用戶知道什么進行驗證的一個例子,是目前最廣泛的身份驗證方法,雖然其安全性比其他幾種方法差,但簡單易行,如果使用恰當,可以提供一定程度的安全保證。防止口令泄漏是這一方法中的關鍵問題。
口令一般是由字母、數(shù)字和特殊字符等組成的字符串,其選擇原則:①用戶容易記憶;②難于被別人猜中或發(fā)現(xiàn);③抗分析能力強;④限制使用期限,可經(jīng)常更換。
目前主要有2種口令生成方法:①由用戶自己選擇口令。②由系統(tǒng)自動生成隨機的口令。前者優(yōu)點是用戶很容易記住它,一般不會忘記.因為所選的口令往往與用戶的某些特征有關,如生日、配偶名、電話號碼等,正因為這樣,口令很容易被猜出來,泄漏的機會較大。較好的方法是設計一個口令生成器,隨機地為用戶生成口令。這種方法帶來的困難是用戶記憶非常困難,即使這個字符串不長,要讓一個人記住它也不是一件容易的事??诹畹墓芾砗苈闊?,用戶的口令要嚴格保密,不能被其他用戶得到??诹罡荒芤悦魑牡男问酱娣旁谙到y(tǒng)中,這樣口令很容易泄漏。因此,必須使用數(shù)據(jù)加密的方法將口令以密文的形式存放在系統(tǒng)中。
ASP.NET提供了3種驗證用戶的模式,每一種驗證模式都是通過一個獨立的驗證程序?qū)崿F(xiàn)。3種驗證模式分別為Windows、Forms和Passport。Windows驗證是通過I2S實現(xiàn):Forms驗證是在開發(fā)人員自己的服務器上實現(xiàn):而Passport驗證則是通過微軟公司的訂閱服務實現(xiàn)。
2.1 Windows驗證
當用戶請求ASP.NET頁面時,請求信息首先遇到的是Web服務中的Internet信息服務。Internet信息服務首先驗證用戶身份,或者將驗證工作交給ASP.NET應用程序。這種Windows身份驗證過程如圖l所示。
2.1. l 基本身份驗證
除了根本不進行驗證外,基本身份驗證是一種最簡單的驗證方式,也是一種收集用戶證件的行業(yè)標準方法。
基本身份驗證的步驟:①客戶向服務器請求被限制的資源;②Web服務器以“401 unauthoried”進行響應;③客戶端瀏覽器接收到這條信息后,要求用戶輸入用戶名和密碼來進行驗證;④如果驗證失敗,用戶證件無效,則會返回“2”,重新以“401 Unauthoried”響應;⑤如果驗證成功,客戶瀏覽器便通過身份驗證,可以訪問請求資源。
2.1.2 Windows域服務器的摘要式驗證
摘要式身份驗證,提供了與基本身份驗證同一樣的功能,在通過網(wǎng)絡往服務器傳送用戶證件信息時提高了安全性。摘要式驗證會使用MD5哈希算法加密來處理用戶證件資料。由于此項處理是單向,就算有人從網(wǎng)絡上將它們截取下來,也無法解譯成原來的用戶名與密碼,從而保證服務器資源的安全性。
2.1.3 集成Windows身份驗證
集成Windows身份驗證時,將不會要求用戶輸入證件。相反,當瀏覽器連接到服務器后,即將加密后的、用戶登錄計算機時使用的信息發(fā)送給服務器。服務器檢查這些信息,以確定用戶是否有權訪問。
2.2 窗體驗證
窗體驗證,即驗證用戶證件資料。在ASP.NET中,可以選擇由ASP.NET應用程序通過窗體驗證進行身份驗證,而不是通過I2S。窗體驗證是ASP.NET驗證服務,它能夠讓應用程序擁有自己的登錄界面。當用戶試圖訪問被限制的資源時,便會被重定向至登錄界面,而不是彈出登錄對話框。在登錄頁面中,可以自行編寫代碼驗證用戶的證件資料。
安全處理流程如圖2所示。
在登錄界面中提交按鈕的Click事件處理程序中,可檢查用戶輸入的證件資料,從而判斷證書資料是否正確,也就是身份驗證的過程。根據(jù)證件資料不同的存放位置,可以將驗證方式劃分為以下3種。
(1)在代碼中直接驗證設計人員可以直接在代碼中將用戶輸入的證件資料一一對比,從而判斷用戶證件資料是否正確。
(2)利用數(shù)據(jù)庫實現(xiàn)驗證在代碼中直接對比用戶的證件資料,不僅麻煩而且代碼也難以維護。當用戶很多時,驗證會顯得十分麻煩。這時,可將用戶列表信息先存儲在數(shù)據(jù)庫里,然后在login_btn_Click()方法中編寫代碼從數(shù)據(jù)庫取出用戶資料,再逐一對比,如果有相符者,則通過驗證。
(3)利用配置文件實現(xiàn)驗證在配置文件中,使用forms>子元素的credentials>項定義用戶名和密碼,即將正確的用戶證件資料存儲在配置文件中。當用戶登錄時單擊“登錄”按鈕,可以在其Click事件處理程序中調(diào)用FormsAuthentication,Authenticate()方法,系統(tǒng)便會自動地將用戶所輸入的信息與credentials>項中的用戶名與密碼相比較,如果相符,則可通過驗證。
2.3 Passoort驗證
Passport驗證是微軟公司提供的一種驗證服務,其工作原理與窗體驗證類似,只是無需創(chuàng)建任何自定義的功能。這兩種方法都是在客戶端創(chuàng)建Cookie,用于授權。使用Passport驗證時,用戶將被重定向至Passport登錄網(wǎng)頁,該頁面提供了一個非常簡單的窗體讓用戶填寫用戶驗證資料,窗體將通過Passport服務來檢查用戶的證件,以確定用戶的身份是否有效。如果用戶證件通過了驗證,則為它在客戶端計算機上建立一個驗證Cookie。
評論