熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> .NET編程 >> 正文

開發安全的ASP.NET應用程序

2013-11-13 09:50:15  來源: .NET編程 

  Web應用程序會遭到幾種類型的攻擊其破壞效果會因程序本身的不同而不同因此安全性是與程序的用法和用戶與其功能交互的方式密切相關的那麼應該如何來設計和編碼ASPNET應用程序呢?

  從應用程序的角度來看安全性通常指對用戶的鑒別以及對系統資源授予訪問權限ASPNET提供了許多鑒別和授權機制它們與IISNET Framework以及操作系統底層的安全服務是相連的

  當一個客戶端發出一個Web請求時將發生下列順序的鑒別和授權事件

  IIS鑒別

  ASPNET鑒別

  ASPNET授權

  鑒別用戶

  如果頁面是可以被察看的而請求來自一個非受限的IP地址IIS將通過預定義的鑒別機制來對調用請求進行鑒別首先IIS確保請求來自一個可信任的IP地址如果不是請求將以HTTP錯誤而被拒絕第二個措施是檢查被請求的資源是否可以被讀或被浏覽如果不是請求將以HTTP錯誤而被拒絕然後IIS嘗試使用IntergratedDigest或Basic方法來鑒別這個調用如果用到了Windows的Intergrated方法Kerberos或NTLM將被使用如果請求通過了這一關就輪到ASPNET出場了

  ASPNET支持三種類型的鑒別方法WindowsForms和Passport如果ASPNET被配置為Windows鑒別則它不需要其它的步驟而是直接承認任何從IIS傳來的安全標記如果ASPNET被配置為Forms鑒別將使用一個HTML表單提示用戶輸入信任資料通過用戶ID和密碼在存儲的合法用戶列表中查尋應用程序可以任意選擇最合適的存儲機制包括SQL Server數據庫或Active Directory服務最後如果ASPNET被配置為Passport鑒別用戶將被轉入一個Passport Web站點並由Passprot服務來鑒別

  第四中類型的鑒別是None這意味著ASPNET並不執行自己的鑒別而是完全依靠已經由IIS執行的鑒別在這種情況下匿名用戶可以連接進來而訪問資源使用的是ASPNET賬戶將ASPNET鑒別模式設定為None並不妨礙程序實現自己的鑒別層

  在nfig文件中通過使用<authentication>區段來選擇ASPNET的鑒別機制默認的鑒別模式是Windows

  授權

  當然鑒別只是意味著用戶被確認為是其本身下一步是確認用戶擁有足夠的權限來訪問請求的資源

  在鑒別完之後ASPNET將校驗調用是否被授權用以訪問請求的資源來執行操作一對HTTP模塊提供了這項服務UrlAuthorizationModule和FileAuthorizationModule前者確保nfig文件中<authorization>區段中的授權規則完全實現後者在使用Windows鑒別時來檢查調用是否有足夠的訪問許可來訪問請求的資源在這種情況下通過比較訪問資源的控制列表(ACL)調用的標記來執行校驗在處理過程中也可以用NET roles來改變調用者的權限以便使用某個資源

  授權規則由兩部分獨立的信息組成它們定義了哪些是允許的那些事禁止的在<authorization>區段內標記<allow>定義了允許的用戶任務和操作相反在<deny>標記中包含了不被允許的用戶任務和操作

  你也許注意到鑒別模式只能在nfig文件或在程序層的nfig文件中設置子目錄繼承了程序的鑒別模式但是授權設置可以在每個子目錄的nfig文件中設置換句話說授權比鑒別支持更細

  基於角色的安全

  如果你需要鑒別用戶你同樣需要為他們建立個性化的頁面這裡有兩大的選擇一是實現一個個人資料系統為每個用戶存儲配置信息二是定義一些角色把用戶映射到這些角色上

  在第一種情況下要維護個人資料記錄可能需要存儲與用戶界面有關的設置以及打開或關閉的功能在設計頁面時訪問這些個人資料記錄來為當前用戶生成相應的頁面

  如果你不必維護每個用戶的信息而只是要將用戶分類並維護基於每一類的信息那基於角色的方法就顯得更好一個角色是一個名稱——一個簡短的描述性字符串——它為屬於這個角色的每個用戶定義了一組功能用戶界面元素以及權限

  定義角色需要兩個步驟首先定義所有可能的角色為每個用戶分配其中的一個或多個這通常在數據庫層完成典型的你在存儲用戶名字和密碼的數據庫中加入一列來存儲每個用戶的角色

  鑒別一個用戶時其身份並沒有和任何角色信息關聯但是有一個功能用來來檢查某一個身份是否屬於特定的已定義角色可以使用PageUser對象的IsInRole功能來檢驗一個用戶的角色 if(UserIsInRole(Boss))

  ResponseWrite(The user is the boss

  定義角色的第二步是將每個已鑒別的用戶與角色相關聯要這樣做你必須創建一個新的主體對象其類型可以是普通的或與授權種類相同通常在Globalasax文件中處理AuthenticateRequest事件時完成 //角色是根據當前用戶從數據庫中讀出的字符串

  ContextUser=new GenericPrincipal(UserIdentityrole)

  這時鑒別模塊能夠通過本地nfig文件的<authorization>區段來檢驗用戶的角色例如一個其nfig文件如下所示的文件夾裡的頁面只能被屬於Boss角色的用戶訪問 <authorization>

  <allow roles=Boss/>

  <deny users=*/>

  </authorization>

  鑒別模塊使用IsInRole函數通過角色來授權

  保護你的應用程序

  保護一個Web應用程序就必須保護Web服務器不受各種攻擊但是它還需要實現有效的辦法來阻止對頁面的非法訪問ASPNET提供了一些內建的代碼來對用戶和操作來進行鑒別和授權


From:http://tw.wingwit.com/Article/program/net/201311/11702.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.