使用 IIS 進行ASP.NET 成員/角色管理(1):安全和配置概述

來源:互聯網
上載者:User
asp.net|iis|安全

  適用於:

  Microsoft ASP.NET 2.0
  Microsoft Visual Studio 2005
  Microsoft Internet 資訊服務

  摘要:Peter Kellner 就建立應用程式來管理 Microsoft ASP.NET 2.0 成員資格資料庫寫了兩篇文章,這是第一篇。本文主要論述如何保證解決方案的安全性以確保只有適合的管理員才能訪問這些資料。

  摘要

  本系列由兩篇文章組成,論述如何安全使用和設定用於管理 ASP.NET Membership 與 Roles 的三層解決方案,本文是第一篇。本文將主要論述如何配置、使用以及(最重要的是)保證此解決方案的安全性,並概述如何將其在典型的 Microsoft ASP.NET 2.0 Web 解決方案中實現。MembershipRoles 對象被視為可運作,而不用深究其內部結構。管理 Members 和 Roles 似乎與管理簡單資料來源中的資料無異。在第二篇文章中,將詳細說明這些控制項和對象的內部結構,以便開發人員能夠使用類似的技術建立自己的控制項和對象。

  簡介

  ASP.NET 2.0 將使用者身分識別驗證直接擴充到了應用程式編程領域。使用標準的 .NET 庫引用 (system.web.security),開發人員只需另外進行非常少的工作就可以為其應用程式建立完全身分識別驗證。請記住,必須執行必要的操作以儘可能保證建立的應用程式在使用期間的安全性。

  本文概述了安全機制並顯示了樣本安全設定,這些設定是為 Web 應用程式建立安全環境的基本要素。ASP.NET 2.0 提供了許多不同的配置選項,這些選項是否必要取決於安全要求。本文將介紹這些配置選項的優缺點。

  安全性注意事項

  保證實體環境的安全性

  人們常說,電腦的安全性由電腦前端面板上的電源開關來決定。無論作業系統層級對系統的保護有多麼嚴密,物理保護都是最基本的。所以必須假定任何有權以物理方式訪問電腦的使用者始終能夠以某種方式危害電腦的完整性。

  保證域環境的安全性

  必須遵循設定使用者帳戶、密碼和許可權的最佳做法。例如,如果不具有相應許可權的使用者能夠直接存取包含 Web 應用程式所用的安全資料的資料庫,則該應用程式可能會受到危害。

  保證 .NET 環境的安全性

  .NET 環境允許設定程式碼存取安全性。這意味著各個系統和應用程式庫可以與不同的信任層級相關聯。這在某些環境中是非常重要的,例如,可以運行多個 Web 應用程式的共用宿主環境。可能由不同使用者擁有的每個 Web 應用程式可能會要求彼此隔離與保護。此外,如果不進行這種隔離,每個 Web 應用程式都可能影響關鍵的系統功能。

  本文假定 ASP.NET 使用者(IIS 代表該使用者運行)以最高信任層級運行。這就好像 Web 應用程式在專門環境中運行一樣。

  ASP.NET 與 IIS 的關係

  在與 IIS 配合工作時,ASP.NET 支援三種身分識別驗證提供者:Forms 身分識別驗證(使用應用程式特定的邏輯)、Passport 身分識別驗證(由 Microsoft 提供的集中驗證服務)和 Windows 身分識別驗證(使用直接通過 IIS 提供的身分識別驗證)。本文使用的是 ASP.NET 項目的預設身分識別驗證:Forms 身分識別驗證。身分識別驗證模式在 web.config 檔案中指定。文法選擇如下。

<authentication mode = "{Windows|Forms|Passport|None}">
</authentication>

  流程圖中描述了使用者從 網頁用戶端登入時要遵循的流程。

  請記住,這篇文章編寫於 2001 年,當時的流程是相應於 IIS 5.1 而言的,而不是目前的 IIS 6.0 或更高版本。

圖 1:IIS 與 ASP.NET 之間的安全流程

  ASP.NET 2.0 網站中角色型安全性

  初始安裝與配置

  web.config 檔案/不常改動項

  web.config 檔案中設定了一些影響 ASP.NET 2.0 Web 應用程式總體運行情況的參數。樣本參數包括,對成員資格提供者(或資料庫)的引用、所需密碼強度以及是否要求註冊電子郵件。下面顯示了 web.config 檔案中的相關部分,其中包含最低安全性配置值樣本。詳細資料可通過以下方式獲得:訪問 Visual Studio 2005 協助,然後查閱“Membership Members”。每個安全性參數在此均有詳細說明。

<providers>
<remove name="AspNetSqlMembershipProvider"/>
<add name="AspNetSqlMembershipProvider"
type="System.Web.Security.SqlMembershipProvider,
System.Web, Version=2.0.0.0, Culture=neutral,
PublicKeyToken=b03f5f7f11d50a3a"
connectionStringName="LocalSqlServer" 
enablePasswordRetrieval="false"
enablePasswordReset="true"
requiresQuestionAndAnswer="true"
applicationName="/"
requiresUniqueEmail="false"
minRequiredPasswordLength="1"
minRequiredNonalphanumericCharacters="0"
passwordFormat="Hashed"
maxInvalidPasswordAttempts="5"
passwordAttemptWindow="10"
passwordStrengthRegularExpression=""
commentTimeout=""/>
</providers>

  除了上面顯示的 web.config 檔案部分外,machine.config 檔案中包含與 Membership 關聯的資料庫的預設連接字串。可以在 web.config 檔案中配置一個不同的連接字串。要添加附加安全性,可以編碼連接字串,並可以加密 Membership 資料庫密碼。許多文章已針對這些折衷方法進行了論述。Microsoft 的快速入門手冊(英文)中提供了有關如何在 web.config 檔案中使用加密的很好的樣本。

  web.config 檔案/.aspx 頁面安全性

  可以為 Web 應用程式中的每個網頁指定一個安全層級。通過指定訪問頁面所需具備的角色即可執行此操作。web.config 檔案中的文法非常簡單。例如,以下 web.config 片段指定了只有角色被指定為 Administrator 的使用者才能訪問網頁 MembershipGrid.aspx。

<system.web>
<location path="MembershipGrid.aspx" >
<system.web>
<authorization >
<allow roles="Administrators"/>
</authorization>
</system.web>
</location>
</system.web>

  又例如,要指定只有特定角色才能訪問某個子目錄中的所有頁面,則 web.config 檔案如下。在本樣本中,只有角色被指定為 Administrator 的使用者才能訪問 ~/AdminDir 路徑中的所有檔案。

<system.web>
<location path="AdminDir" >
<system.web>
<authorization >
<allow roles="Administrators"/>
</authorization>
</system.web>
</location>
</system.web>

  web.config 檔案/內部 .aspx 頁面安全性

  很多時候,需要提供比上述更精確的安全性。也就是說,可能需要對控制項(例如按鈕)或 aspx 頁面提供保護。為此,需要以編程方式更改與會受影響的控制項關聯的屬性。例如,如果需要根據使用者角色隱藏某個刪除按鈕,則需要執行兩步操作:首先,應該把名為 ShowButtonBasedOnRole 的方法添加到網頁的 codebehind 類。如果使用者具備要求的角色,將返回 true;如果使用者不具備要求的角色,將返回 false

protected bool ShowButtonBasedOnRole(string RoleOfInterest)
{
return User.IsInRole(RoleOfInterest);  
}

  然後,在實際 aspx 頁面上,基於內含代碼方法 ShowButtonBasedOnRole 來設定該按鈕的可見度屬性。該按鈕的實際聲明大致如下。

<asp:Button ID="Button1" runat="server" Text="按鈕" Visible='<%# (bool) ShowDeleteRowBasedOnRole("administrator") %>'> />

  如果按鈕基於所設定的多個角色中的任何一個,則傳入參數可更改為字串,並且在返回使用者是否被指定為其中某個角色的答案之前,將檢查所有這些角色。

  使用成員/角色管理器 aspx 頁面

  要使用本項中包含的 aspx 頁面 (Membership.aspx),需要執行以下幾步操作。首先,需要複製文章專案檔中的兩個資料類並將它們包含在目標項目的 app_code 目錄中。這兩個檔案為 MembershipDataObject.cs 和 RoleDataObject.cs。然後,需要將 aspx 檔案 Membership.aspx 及其內含字碼頁面 Membership.aspx.cs 移到當前項目中。

  一定要對此頁面提供保護,以防止任何未被指定為 Administrator 角色的使用者訪問它。否則,任何使用者都能夠修改其他使用者的登入資訊。為此,請確保 Membership.aspx 頁面在 web.config 檔案中受到保護。web.config 檔案中用來實現此目的的樣本行如下。

<system.web>
<location path="Membership.aspx" >
<system.web>
<authorization >
<allow roles="Administrators"/>
</authorization>
</system.web>
</location>
</system.web>

  由於此頁面受到了保護,因此當前登入的使用者帳戶必須被指定為 Administrator 角色才能訪問此頁面。

  實現此目的的最好方法是執行一次下面的代碼,然後從 Web 服務器中刪除該代碼。例如,可以在 ASP.NET 網頁的頁面載入事件中執行。然後在調用此頁面之後,從伺服器中將其刪除。這樣,只有使用密碼登入帳戶 admin 才能訪問 Membership Management 頁面。

Roles.CreateRole("Administrator");
Roles.CreateRole("User");
Roles.CreateRole("Guest");
Membership.CreateUser("admin", "在此輸入強密碼");
Roles.AddUserToRole("admin", "Administrator");

  結論

  設定任何網站時,都務必確認將使用該網站的使用者並瞭解他們的相關安全性要求。例如,如果網站將供公司的內部組使用,不會有外部使用者訪問,且不包含敏感性資料,那麼配置簡單安全性就足夠了。即,不需要加密、鬆散密碼約束等。身分識別驗證可以作為跟蹤輸入資料的使用者身份的一種便利方法。反之,如果網站在 Internet 上並且會處理機密資料,則一定要儘可能鎖定該網站,僅允許通過身分識別驗證的使用者進行訪問。

  本文簡要介紹了在設定 ASP.NET 網站的安全性時需要注意的事項,說明了如何添加安全頁面來修改登入到網站的使用者的 Membership 和 Role 資訊。本系列由兩篇文章組成,下一篇文章將假定讀者已瞭解開發網站時設定安全性方面的問題,並將詳細介紹 Membership Management 頁面的工作方式。

  作者簡介

  Peter Kellner 於 1990 年創辦了 73rd Street Associates,在此成功地為全國 500 多家客戶提供了有關大學醫務室調度、保險公司管理和一站式醫生診所管理的系統。十年後(即 2000 年),一家大型保險公司收購了 73rd Street Associates,於是 Peter 開始了作為獨立軟體顧問的新職業生涯。目前,他涉及的技術中包括 ASP.NET、Oracle、Java、VOiP,很快會包括 SQL Server。 不工作時,Peter 將他的大部分空閑時間花在騎車旅行上。他已騎車周遊了全世界。最近,他和妻子 Tammy 只用了 27 天就完成了從美國加利福尼亞州騎車到喬治亞州的旅程。

  他的部落格網站為 http://peterkellner.net/。您可以在下載地區找到本文和所列的代碼。



相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.