范振鈞,叢云飛
(通化師范學院 計算機科學系,吉林 通化 134002)
ASP.Net是未來Web應用開發的趨勢,安全性是ASP.Net Web應用程序中一個非常重要的方面.基于ASP.Net Web應用程序的安全性分為以下兩個層次的內容:①在.Net平臺級安全性架構的設計,主要探討在.Net平臺的支持下,采用何種安全策略對用戶進行身份驗證和授權.②應用程序級的安全性設計,主要研究如何減少常見的安全威脅,防止黑客入侵的措施.
ASP.Net與Microsoft Internet信息服務(IIS)協同工作[1],它們一起為Web應用程序安全提供了一個基礎結構,ASP.Net安全結構圖如圖1所示.

圖1 ASP.Net安全結構圖
Web客戶端通過Microsoft Internet信息服務(IIS)與ASP.Net應用程序通信.IIS根據需要對請求進行身份驗證,然后找到請求的資源.如果客戶端已被授權,則資源可用..Net安全架構提供了3個關鍵的安全過程:身份驗證、授權、模擬,是Web應用程序安全性實現的基礎[2].
(1)身份驗證(Authentication).身份驗證過程接受用戶憑據,并根據指定的頒發機構來驗證憑據.客戶端必須提供憑據,以便服務器驗證訪問者的標識.確認標識后,應用程序就能授權訪問者訪問系統資源.
(2)授權(Authorization).授權過程確定已證實的標識是否可以訪問某一特定資源.有兩種基本方式來授予對給定資源的訪問權限:文件授權和URL授權.文件授權是根據訪問控制列表(ACL)或資源權限進行檢查,以確認已經過驗證的用戶能否訪問資源.URL授權是根據URL來進行授權,對Web空間上的標識來授權.
(3)模擬(Impersonation).模擬機制允許服務器進程使用客戶端的安全憑據來運行.當服務器模擬客戶端時,服務器的所有操作均使用客戶端的憑據進行.不論IIS是否通過驗證,如果啟用了模擬,則ASP.Net應用程序會模擬所收到的任何標記[3].為了實現模擬需要將程序文件所在磁盤的文件格式轉化為NTFS格式,便于應用程序安全設置.
在上述安全性工作基礎的保障下,ASP.Net給應用程序提供了多種安全工作策略,兩種常用的安全性工作策略是:①使用Windows身份驗證、不允許匿名訪問并啟用模擬;②使用窗體身份驗證、不允許匿名訪問并禁用模擬.
(1)使用Windows身份驗證、不允許匿名訪問并啟用模擬.使用Windows身份驗證、不允許匿名訪問并啟用模擬方案依賴于IIS身份驗證和Window Nt文件安全性,可以最大限度地減少ASP.Net應用程序本身的安全性編程量[4].
一般來說,有兩種情況適合使用于ASP.Net中采用Windows驗證模式.第一種是Intrant站點(亦即公司內部站點);第二種情況是事先知道有哪些用戶會訪問您的站點.應用程序必須為每一個用戶創建一個Windows賬戶,并設置用戶名稱與密碼以便在訪問網站中作為登錄證書.如果用戶數量很多建議使用組.注意登錄用戶必須擁有ASP.Net應用程序所在目錄的NTFS訪問權限,才能訪問ASP.Net應用程序.
(2)使用窗體身份驗證,不允許匿名訪問并禁用模擬.基于窗體的身份驗證可以定制登錄頁面及登錄準則,可以將未授權的用戶重定向到程序指定的登錄頁面.這種身份驗證方案是互聯網上許多Web應用程序進行身份驗證的固定模式.使用窗體身份驗證,登錄用戶信息已經提前保存在數據庫中.它的主要思想是將網站的網頁分為兩類:一類是常規性的網頁,允許匿名訪問.對此類網頁的訪問請求ASP.Net不做限制,只要用戶的ip地址與域名稱被IIS認可,可以隨時接受訪問;另一類是含有重要的保密信息的網頁,對這類網頁的訪問,必須由ASP.Net進行驗證.驗證的過程如下:當ASP.Net接手從IIS移交過來的請求后,首要的工作就是檢查該請求的標頭中是否含有一份驗證Cookie(驗證票).如果沒有,表示該位用戶沒有通過驗證.此時便會將請求重定向至登錄網頁,讓用戶輸入正確的證書資料.用戶在登錄頁上提交正確的用戶憑據(用戶賬號和密碼)后,窗體驗證的處理機制會產生一份內含證書或密碼的驗證Cookie(亦即驗證票),并將驗證的Cookie加至該請求的標頭中,然后重定向到用戶原始請求的頁上.當用戶在同一會話中再次請求該頁時,請求頭中將包含身份驗證表單以便再次驗證和授權.
可以由4種方法實現窗體身份驗證.①在代碼中直接驗證用戶.②利用web.config實現驗證.③利用數據庫實現驗證.④利用證書(xml)文件實現驗證.本文只探討②方案的實現方法.
(1)主要思想:在數據庫中添加一個用戶表,含有userName,passWord字段,注意將passWord字段使用MD5或SHAI算法加密.在程序中對登錄頁面提供的賬號密碼信息,同數據庫中用戶的帳號和密碼信息進行比較,如相符則驗證成功,否則重定向到登錄頁面中[5].
(2)實現的主要步驟及使用的.Net關鍵對象.①通過sqlConnection、SqldataReader等對象實現數據庫數據讀取操作.②調用FormsAuthentication對象的HashPasswordForStoringInConfigFile方法,對用戶輸入的密碼進行加密.③判斷用戶密碼是否存于數據庫中,如果存在,創建存儲用戶證件資料的Cookie,并跳轉到受保護的頁面中,否則重定向到登錄頁面.
上述兩種安全方案充分地利用了.Net框架和IIS的功能,可以很好地保證程序的安全性.但是上述兩種方案都是明碼傳送,對黑客攻擊所帶來的安全隱患考慮不夠,所以在程序設計層面上還應該采取進一步的措施,預防各種黑客的攻擊,才能實現真正的安全.
(1)使用安全的驗證控件,預防腳步注入.借助于驗證控件,我們可以在網頁加入輸入檢驗功能.驗證控件提供一種簡單的機制來進行所有通用類型的標準驗證,驗證控件允許設計者自行決定要如何顯示錯誤信息.在用ASP.Net進行窗體頁面設計的時候,通過使用RegularExpressionValidator、RequiredFieldValidator、RangeValidator、CompareValidator等驗證控件對訪問者的輸入信息進行限制,有效的屏蔽JavaScript腳本字符,預防腳本注入.
(2)定期更新Cookie,防治盜用Cookie.當應用程序采用窗體身份驗證方案進行驗證時,一般情況下,大都使用Cookie來維護用戶在各個請求之間的標識,而通過網絡監視程序“盜用”用戶Cookie是網絡黑客入侵應用程序的常用手段.因此,設計者可以采用使服務器定期更新Cookie方法,來防止其他用戶盜用Cookie訪問站點,在一定程度上保護網站不被侵入.
(3)使用存儲過程,避免SQL注入式攻擊.要避免SQL注入攻擊首先需要通過,RegularExpressionValidator驗證控件對用戶輸入進行驗證.然后,在驗證的基礎上編寫標準的存儲過程,并使輸入參數與相應的列具有相應的尺寸,這樣黑客就無法把大量數據或大的文本塊送到存儲過程中.通過執行存儲過程實現對數據表的操作,避免了對數據表的直接訪問,實現了用戶和數據的隔離,減少應用程序泄密的危險,保證了數據的安全.
安全性是ASP.Net Web應用程序設計中一個非常重要的方面.詳細明白Web應用程序中安全性原理,減少常見的安全威脅、保護Web應用程序中的資源以及對用戶進行身份驗證和授權的信息,對程序員進行軟件開發有重要的理論價值和現實意義.
參考文獻:
[1]曲衛華.ASP.NET安全性淺析[J].太原大學學報,2009,10(3).
[2]李偉.基于ASP.NET應用程序的安全性設計和實現[J].科技情報開發與經濟,2008,18(5).
[3]蘇玉召,趙妍.基于ASP.Net安全模型的用戶模擬的設計與實現[J].計算機信息與技術,2006(4).
[4]桂學勤,余英宏.ASP.Net安全性工作方案和窗體身份驗證的實現[J].微計算機應用,2005(1).
[5]章立民.用實例學ASP.Net[M].武漢:華中科技大學出版社,2006.