ASP.NET安全性是Web 應用程式中一個非常重要的方面,它涉及內容非常廣泛,不能在一篇文章內說明所有的安全規範,本文講述如何利用IIS以及Forms 身分識別驗證構建安全的 ASP.NET 應用程式,它是目前被使用最多最廣的驗證/授權方式.
本文分別以ASP.NET1.1與ASP.NET2.0在Forms 身分識別驗證上的實現方法,以及ASP.NET2.0較上一版本有哪些改進或變化進行說明.相信讀者都己經看過許多類似這樣的文章,不倫是在網上或是某些專業書籍上,最近又有模式&實踐小組成員發布WCF安全模型指南,可見構建網站安全總是不過時的話題,作者認為此文也絕對是您應該收藏的參考資料.
ASP.NET安全性的工作原理
網站在安全性方面有一個常見的要求:特定的頁面僅允許某些成員或其他經過身分識別驗證的使用者瀏覽.充分利用Forms身分識別驗證是最好的方式.
身分識別驗證
從實現機制來說ASP.NET1.1與ASP.NET2.0 的安全模型是一致的.首先配置網站為Forms 身分識別驗證模式,之後使用者訪問網站的URL,Forms 身分識別驗證系統會將未經身分識別驗證的請求重新導向到指定的登入頁.使用者輸入憑據(使用者名稱密碼)並提交該頁.如果驗證程式驗證使用者的身份合法,則系統會向用戶端發出一個特定 Cookie(.NET1.1不支援無Cookie模式),它代表使用者的身分識別驗證票據.這樣後續的請求中,用戶端瀏覽器會把該Cookie一同發送致伺服器,如果該Cookie有效則使用者通過身分識別驗證並允許對原始請求的資源的訪問.
授權
如果使用者的請求被驗證通過了,但是他請求的URL是否允許使用者訪問了呢,這就用到了授權.可以通過應用程式設定檔來進行授友也可以在程式中使用代碼來驗證使用者是否有資格訪問該資源.如果授權失敗,則 ASP.NET 將使用者重新導向到登入頁.如果使用者已被授權,則將允許使用者訪問受保護資源.
ASP.NET1.1實現方式
ASP.NET1.1的實現方式非常簡單,不過我們還是需要手寫一些代碼的,下面我們就一步一步地實現.應用程式配置節的詳細說明請參考MSDN相關文檔.
複製代碼 代碼如下:<configuration>
<system.web>
<authenticationmodeauthenticationmode="Forms">
<formsnameformsname=".ASPXCOOKIEAUTH"loginUrl=
"Login.aspx"protection="All"timeout="30"path="/"/>
authentication>
<authorization>
<denyusersdenyusers="?"/>
authorization>
system.web>
<locationpathlocationpath="Admin">
<system.web>
<authorization>
<allowrolesallowroles="Admins"/>
<denyusersdenyusers="*"/>
authorization>
system.web>
location>
configuration>
IDC加強asp.net 1.1/2.0安全性一篇技巧
ASP.NET 1.1:
開啟 C:\WINDOWS\Microsoft.NET\Framework\v1.1.4322\CONFIG\machine.config
設定:
< location allowOverride="false">
< identity impersonate="true" userName="" password=""/>
ASP.NET 2.0 以上:
C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\CONFIG\web.config
設定:
< identity impersonate="true"/>
如果沒有此兩項,分別進行增加:
< location allowOverride="true"> 改為:< location allowOverride="false">
< system.web>
< securityPolicy>
< trustLevel name="Full" policyFile="internal"/>
< trustLevel name="High" policyFile="web_hightrust.config"/>
< trustLevel name="Medium" policyFile="web_mediumtrust.config"/>
< trustLevel name="Low" policyFile="web_lowtrust.config"/>
< trustLevel name="Minimal" policyFile="web_minimaltrust.config"/>
< /securityPolicy>
< trust level="Full" originUrl=""/>
< identity impersonate="true"/> < !-- 這裡增加 -->
< /system.web>
< /location>