適用于: Microsoft ASP.NET 2.0 摘要:Peter Kellner 就創(chuàng)建應(yīng)用程序來(lái)管理 Microsoft ASP.NET 2.0 成員身份數(shù)據(jù)庫(kù)寫(xiě)了兩篇文章,這是第一篇。本文主要論述如何保證解決方案的安全性以確保只有適合的管理員才能訪問(wèn)這些數(shù)據(jù)。 摘要 本系列由兩篇文章組成,論述如何安全使用和設(shè)置用于管理 ASP.NET Membership 與 Roles 的三層解決方案,本文是第一篇。本文將主要論述如何配置、使用以及(最重要的是)保證此解決方案的安全性,并概述如何將其在典型的 Microsoft ASP.NET 2.0 Web 解決方案中實(shí)現(xiàn)。Membership 和 Roles 對(duì)象被視為可運(yùn)作,而不用深究其內(nèi)部結(jié)構(gòu)。管理 Members 和 Roles 似乎與管理簡(jiǎn)單數(shù)據(jù)源中的數(shù)據(jù)無(wú)異。在第二篇文章中,將詳細(xì)說(shuō)明這些控件和對(duì)象的內(nèi)部結(jié)構(gòu),以便開(kāi)發(fā)人員能夠使用類(lèi)似的技術(shù)創(chuàng)建自己的控件和對(duì)象。 簡(jiǎn)介 ASP.NET 2.0 將用戶身份驗(yàn)證直接擴(kuò)展到了應(yīng)用程序編程領(lǐng)域。使用標(biāo)準(zhǔn)的 .NET 庫(kù)引用 (system.web.security),開(kāi)發(fā)人員只需另外進(jìn)行非常少的工作就可以為其應(yīng)用程序創(chuàng)建完全身份驗(yàn)證。請(qǐng)記住,必須執(zhí)行必要的操作以盡可能保證創(chuàng)建的應(yīng)用程序在使用期間的安全性。 本文概述了安全機(jī)制并顯示了示例安全設(shè)置,這些設(shè)置是為 Web 應(yīng)用程序創(chuàng)建安全環(huán)境的基本要素。ASP.NET 2.0 提供了許多不同的配置選項(xiàng),這些選項(xiàng)是否必要取決于安全要求。本文將介紹這些配置選項(xiàng)的優(yōu)缺點(diǎn)。 安全性注意事項(xiàng) 保證物理環(huán)境的安全性 人們常說(shuō),計(jì)算機(jī)的安全性由計(jì)算機(jī)前端面板上的電源開(kāi)關(guān)來(lái)決定。無(wú)論操作系統(tǒng)級(jí)別對(duì)系統(tǒng)的保護(hù)有多么嚴(yán)密,物理保護(hù)都是最基本的。所以必須假定任何有權(quán)以物理方式訪問(wèn)計(jì)算機(jī)的用戶始終能夠以某種方式危害計(jì)算機(jī)的完整性。 保證域環(huán)境的安全性 必須遵循設(shè)置用戶帳戶、密碼和權(quán)限的最佳做法。例如,如果不具有相應(yīng)權(quán)限的用戶能夠直接訪問(wèn)包含 Web 應(yīng)用程序所用的安全數(shù)據(jù)的數(shù)據(jù)庫(kù),則該應(yīng)用程序可能會(huì)受到危害。 保證 .NET 環(huán)境的安全性 .NET 環(huán)境允許設(shè)置代碼訪問(wèn)安全性。這意味著各個(gè)系統(tǒng)和應(yīng)用程序庫(kù)可以與不同的信任級(jí)別相關(guān)聯(lián)。這在某些環(huán)境中是非常重要的,例如,可以運(yùn)行多個(gè) Web 應(yīng)用程序的共享宿主環(huán)境。可能由不同用戶擁有的每個(gè) Web 應(yīng)用程序可能會(huì)要求彼此隔離與保護(hù)。此外,如果不進(jìn)行這種隔離,每個(gè) Web 應(yīng)用程序都可能影響關(guān)鍵的系統(tǒng)功能。 本文假定 ASP.NET 用戶(IIS 代表該用戶運(yùn)行)以最高信任級(jí)別運(yùn)行。這就好像 Web 應(yīng)用程序在專門(mén)環(huán)境中運(yùn)行一樣。 ASP.NET 與 IIS 的關(guān)系 在與 IIS 配合工作時(shí),ASP.NET 支持三種身份驗(yàn)證提供程序:Forms 身份驗(yàn)證(使用應(yīng)用程序特定的邏輯)、Passport 身份驗(yàn)證(由 Microsoft 提供的集中身份驗(yàn)證服務(wù))和 Windows 身份驗(yàn)證(使用直接通過(guò) IIS 提供的身份驗(yàn)證)。本文使用的是 ASP.NET 項(xiàng)目的默認(rèn)身份驗(yàn)證:Forms 身份驗(yàn)證。身份驗(yàn)證模式在 web.config 文件中指定。語(yǔ)法選擇如下。 <authentication mode = "{Windows|Forms|Passport|None}"> 流程圖中描述了用戶從 Web 客戶端登錄時(shí)要遵循的流程。 請(qǐng)記住,這篇文章編寫(xiě)于 2001 年,當(dāng)時(shí)的流程是相應(yīng)于 IIS 5.1 而言的,而不是目前的 IIS 6.0 或更高版本。 圖 1:IIS 與 ASP.NET 之間的安全流程 ASP.NET 2.0 網(wǎng)站中基于角色的安全性 初始安裝與配置 web.config 文件/不常改動(dòng)項(xiàng) web.config 文件中設(shè)置了一些影響 ASP.NET 2.0 Web 應(yīng)用程序總體運(yùn)行情況的參數(shù)。示例參數(shù)包括,對(duì)成員身份提供程序(或數(shù)據(jù)庫(kù))的引用、所需密碼強(qiáng)度以及是否要求注冊(cè)電子郵件。下面顯示了 web.config 文件中的相關(guān)部分,其中包含最低安全性配置值示例。詳細(xì)信息可通過(guò)以下方式獲得:訪問(wèn) Visual Studio 2005 幫助,然后查閱“Membership Members”。每個(gè)安全性參數(shù)在此均有詳細(xì)說(shuō)明。 <providers> 除了上面顯示的 web.config 文件部分外,machine.config 文件中包含與 Membership 關(guān)聯(lián)的數(shù)據(jù)庫(kù)的默認(rèn)連接字符串。可以在 web.config 文件中配置一個(gè)不同的連接字符串。要添加附加安全性,可以編碼連接字符串,并可以加密 Membership 數(shù)據(jù)庫(kù)密碼。許多文章已針對(duì)這些折衷方法進(jìn)行了論述。Microsoft 的快速入門(mén)指南(英文)中提供了有關(guān)如何在 web.config 文件中使用加密的很好的示例。 web.config 文件/.aspx 頁(yè)面安全性 可以為 Web 應(yīng)用程序中的每個(gè)網(wǎng)頁(yè)指定一個(gè)安全級(jí)別。通過(guò)指定訪問(wèn)頁(yè)面所需具備的角色即可執(zhí)行此操作。web.config 文件中的語(yǔ)法非常簡(jiǎn)單。例如,以下 web.config 片段指定了只有角色被指定為 Administrator 的用戶才能訪問(wèn)網(wǎng)頁(yè) MembershipGrid.aspx。 <system.web> 又例如,要指定只有特定角色才能訪問(wèn)某個(gè)子目錄中的所有頁(yè)面,則 web.config 文件如下。在本示例中,只有角色被指定為 Administrator 的用戶才能訪問(wèn) ~/AdminDir 路徑中的所有文件。 <system.web> web.config 文件/內(nèi)部 .aspx 頁(yè)面安全性 很多時(shí)候,需要提供比上述更精確的安全性。也就是說(shuō),可能需要對(duì)控件(例如按鈕)或 aspx 頁(yè)面提供保護(hù)。為此,需要以編程方式更改與會(huì)受影響的控件關(guān)聯(lián)的屬性。例如,如果需要根據(jù)用戶角色隱藏某個(gè)刪除按鈕,則需要執(zhí)行兩步操作:首先,應(yīng)該把名為 ShowButtonBasedOnRole 的方法添加到網(wǎng)頁(yè)的 codebehind 類(lèi)。如果用戶具備要求的角色,將返回 true;如果用戶不具備要求的角色,將返回 false。 protected bool ShowButtonBasedOnRole(string RoleOfInterest)
<asp:Button ID="Button1" runat="server" Text="按鈕" Visible=‘<%# (bool) ShowDeleteRowBasedOnRole("administrator") %>‘> /> 如果按鈕基于所設(shè)置的多個(gè)角色中的任何一個(gè),則傳入?yún)?shù)可更改為字符串,并且在返回用戶是否被指定為其中某個(gè)角色的答案之前,將檢查所有這些角色。 使用成員/角色管理器 aspx 頁(yè)面 要使用本項(xiàng)中包含的 aspx 頁(yè)面 (Membership.aspx),需要執(zhí)行以下幾步操作。首先,需要復(fù)制文章項(xiàng)目文件中的兩個(gè)數(shù)據(jù)類(lèi)并將它們包含在目標(biāo)項(xiàng)目的 app_code 目錄中。這兩個(gè)文件為 MembershipDataObject.cs 和 RoleDataObject.cs。然后,需要將 aspx 文件 Membership.aspx 及其內(nèi)含代碼頁(yè)面 Membership.aspx.cs 移到當(dāng)前項(xiàng)目中。 一定要對(duì)此頁(yè)面提供保護(hù),以防止任何未被指定為 Administrator 角色的用戶訪問(wèn)它。否則,任何用戶都能夠修改其他用戶的登錄信息。為此,請(qǐng)確保 Membership.aspx 頁(yè)面在 web.config 文件中受到保護(hù)。web.config 文件中用來(lái)實(shí)現(xiàn)此目的的示例行如下。 <system.web> 由于此頁(yè)面受到了保護(hù),因此當(dāng)前登錄的用戶帳戶必須被指定為 Administrator 角色才能訪問(wèn)此頁(yè)面。 實(shí)現(xiàn)此目的的最好方法是執(zhí)行一次下面的代碼,然后從 Web 服務(wù)器中刪除該代碼。例如,可以在 ASP.NET 網(wǎng)頁(yè)的頁(yè)面加載事件中執(zhí)行。然后在調(diào)用此頁(yè)面之后,從服務(wù)器中將其刪除。這樣,只有使用密碼登錄帳戶 admin 才能訪問(wèn) Membership Management 頁(yè)面。 Roles.CreateRole("Administrator"); 結(jié)論 設(shè)置任何網(wǎng)站時(shí),都務(wù)必確認(rèn)將使用該網(wǎng)站的用戶并了解他們的相關(guān)安全性要求。例如,如果網(wǎng)站將供公司的內(nèi)部組使用,不會(huì)有外部用戶訪問(wèn),且不包含敏感數(shù)據(jù),那么配置簡(jiǎn)單安全性就足夠了。即,不需要加密、松散密碼約束等。身份驗(yàn)證可以作為跟蹤輸入數(shù)據(jù)的用戶身份的一種便利方法。反之,如果網(wǎng)站在 Internet 上并且會(huì)處理機(jī)密數(shù)據(jù),則一定要盡可能鎖定該網(wǎng)站,僅允許通過(guò)身份驗(yàn)證的用戶進(jìn)行訪問(wèn)。 本文簡(jiǎn)要介紹了在設(shè)置 ASP.NET 網(wǎng)站的安全性時(shí)需要注意的事項(xiàng),說(shuō)明了如何添加安全頁(yè)面來(lái)修改登錄到網(wǎng)站的用戶的 Membership 和 Role 信息。本系列由兩篇文章組成,下一篇文章將假定讀者已了解開(kāi)發(fā)網(wǎng)站時(shí)設(shè)置安全性方面的問(wèn)題,并將詳細(xì)介紹 Membership Management 頁(yè)面的工作方式。 作者簡(jiǎn)介 Peter Kellner 于 1990 年創(chuàng)辦了 73rd Street Associates,在此成功地為全國(guó) 500 多家客戶提供了有關(guān)大學(xué)醫(yī)務(wù)室調(diào)度、保險(xiǎn)公司管理和一站式醫(yī)生診所管理的系統(tǒng)。十年后(即 2000 年),一家大型保險(xiǎn)公司收購(gòu)了 73rd Street Associates,于是 Peter 開(kāi)始了作為獨(dú)立軟件顧問(wèn)的新職業(yè)生涯。目前,他涉及的技術(shù)中包括 ASP.NET、Oracle、Java、VOiP,很快會(huì)包括 SQL Server。 不工作時(shí),Peter 將他的大部分空閑時(shí)間花在騎車(chē)旅行上。他已騎車(chē)周游了全世界。最近,他和妻子 Tammy 只用了 27 天就完成了從美國(guó)加利福尼亞州騎車(chē)到喬治亞州的旅程。 他的博客站點(diǎn)為 http:///。您可以在下載區(qū)域找到本文和所列的代碼。 作者:Peter Kellner 來(lái)源:microsoft (責(zé)任編輯:webjx)
|
|