asp.net|程式
從安全的角度上講,相對於自身的前一版本,ASP.NET已經表現出很大的改進。使用這一新的開發平台,程式員可以很容易地設計使用者輸入驗證,同時,這一平台增加了很多特性,比如鎖住程式功能等。除此之外,.NET已耗用時間能夠支援垃圾收集和安全字串的功能,這些都能預防外部的各種攻擊。一個合適安全的.NET程式不僅能夠阻止外部攻擊,並且能夠最大程度地減少各種形式的垃圾。
但是,不管ASP.NET具有多麼完善的功能,在安全問題上它也不是完美無缺。安全分析專家H.D. Moore,也就是四月份的CanSecWest研討會上的ASP.NET部分的three fairly major security holes(三個主要安全突破口)的作者,他說,這些強大的功能特性將會毫無價值,除非開發人員經常使用它們。Moore建議使用以下簡單的安全技巧,以保護你的ASP.NET程式。
使用一些簡單的設定控制
作為一種通用規則,請不要隨便將任何資訊放置在網路,因為這些資訊將成為駭客攻擊的線索。除非是一些與ISAPI處理常式相映射的副檔名,比如副檔名為:.aspx, .cs,及.vb。相反,以.txt, .csv, 及.xml的檔案將不會自我保護,任何訪問網站的人都可以訪問這些檔案。
在發布任何一個新的程式之前,一定要確認將支援跟蹤和調試的功能去掉,並注意將web.config檔案中的customErrors標籤不要設定為“off”。這些安全措施有助於防止資訊暴露到程式外面,特別是當程式發生錯誤的時候,這些資訊包括:檔案名稱,路徑,以及可能的原始碼等。
同時,在發布新程式之前,一定要清除程式的相關路徑。請確認去掉Visual Studio項目和程式路徑中的臨時檔案。與ISAPI訪問過濾器不相映射的.sln和.slo檔案將有可能從網際網路上被看到,因為有些人可以猜想到程式的名稱,這樣就有可能導致巨大的攻擊。
避免使用cookieless會議管理
Moore在評論中指出,ASP.NET的其中一個顯著缺點是在程式中使用了"cookie-less session management"(cookie-less會議管理)方案而出現的"hijack"(搶劫)攻擊。這一方案將會議標識符嵌入到每一個URL,讓伺服器能夠識別每一個客戶。這樣就有可能出現問題:當使用這一功能的伺服器收到一個不認識但合法的會議標識符,它就會產生一個可以參加的會議,這樣一個“聰明的”駭客就會充分利用這一破綻,冒充合法使用者,合法會議標識符,就可以訪問系統內容。
這是一個陰險的攻擊,Moore說到,因為URL不會覺得使用者可疑,只有會議ID是可以偽造的。他建議開發人員儘可能地避免使用cookieless會議管理,直到微軟把這一缺陷去掉。
“躲在砂盒(sandbox)裡”
有時候.NET已耗用時間管理環境也會遭到如緩衝溢出的攻擊,Moore指出,這是由於諸如使用StateServer類而導致的問題,隨意調用這些管理不良的類有時候會為駭客提供攻擊的線索。
Moore說道,開發人員應該儘可能地只限於使用.NET管理"sandbox" API函數,因為調用任何管理不良的類都有存在很大風險。然而,有時候你也可以使用一些特別的功能,如下面所示的技巧。
驗證,驗證,驗證
儘管推出很多優異的功能,一些傳統的特性還是深受應用,比如使用者輸入的驗證。開發人員應該充分的利用強大的Validator(驗證器)功能。這一功能可以從System.Web.UI.Validator擴充而來。如果你從未聽說過.NET's validators,你自己可以閱讀這方面的內容。
使用資料匹配功能
當在一個資料庫程式中使用數字域時,在使用變數之前一定要確定將變數與合適的資料類型匹配起來。這樣做可以預防產生SQL內部攻擊,特別是當使用者將一些非數字變數輸入資料庫時產生的異常。更重要的是,這樣做可以產生警報,或寫入日誌,這很象是一個小型的非法闖入偵查系統。
更進一步的措施
如果你要在作業系統中安裝一個網路程式,你最好充分利用web.config檔案中的設定來運行程式,這樣才能確保不同的使用者驗證。除此之外,你可以利用網路服務管理器來設定程式的信任層級,這樣可以提高程式的安全性。