Introduction to Code Access Security(英文) Code Access Security(英文) Security Namespaces in Visual Studio(英文) Web 應用程序 解決 Web 應用程序的安全問題,可以保護您的服務器免受惡意代碼的攻擊,並保護數據不被破壞。您可以使用多種方法來保護服務器。
通過禁用 XML Web services 的動態發現功能來禁止用戶查找和運行您的 XML Web services。 在允許用戶訪問服務器之前,通過身份驗證來驗證用戶的標識。 通過使用 ASPNET 進程標識,可以更好地調整用戶可以使用的資源。 下面將詳細討論每一種方法。
動態發現 動態發現是 .NET 框架的一項功能,它允許 Web 浏覽器查找在服務器上運行的 XML Web services。找到 XML Web service 後,用戶就可以調用該 XML Web services 的方法。動態發現雖然為用戶提供了強大的功能,但同時也給服務器帶來潛在的安全危險。多數情況下,您不需要啟用動態發現功能。安裝 .Net 框架時,動態發現在默認情況下處於禁用狀態。這並不表示 XML Web services 不可用,而只表示服務器將不提供可用服務的目錄。客戶端仍然可以使用 XML Web services,但您需要向其提供該服務的確切位置。
警告:禁用動態發現後,您需要將 XML Web services 的位置發送給客戶端。 在部署服務器上,有兩個項可以控制 XML Web services 的發現功能。第一項(machine.config 文件)控制服務器的整體發現功能。Machine.config 文件是一個包含控制服務器上 Web 應用程序的設置的 XML 文件,它位於 \%Windows%\Microsoft.Net\Framework\Version\Config 文件夾。此文件包含一個默認情況下被注釋掉的元素。要啟用發現功能,您需要刪除這些注釋字符。還需要使用 ASPNET 帳戶來運行應用程序,如下一節“ASPNET 進程標識”中所述。
<!--<add verb="*" path="*.vsdisco" type="System.Web.Services.Discovery.DiscoveryRequestHandler, System.Web.Services, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" validate="false"/>--> 第二項是一個發現文件。發現文件可以是默認的發現文件 (default.vsdisco),也可以是 XML Web services 特定的發現文件。它是一個 XML 文件,包含有關 XML Web services 文件位置的信息。
要客戶端能夠發現特定的 XML Web services,您需要在 Machine.config 文件中啟用發現功能,並創建和部署應用程序的發現文件。發現文件是一個僅列出不包含 XML Web services 的路徑的 XML 文件。下面提供了一個示例。有關創建和部署此文件的完整說明,請參閱 Deploying XML Web Services in Managed Code(英文)。
<?XML version="1.0" encoding="utf-8" ?> <dynamicDiscovery XMLns="urn:schemas-dynamicdiscovery:disco.2000-03-17"> <exclude path="_vti_cnf" /> <exclude path="_vti_pvt" /> <exclude path="_vti_log" /> <exclude path="_vti_script" /> <exclude path="_vti_txt" /> <exclude path="Web References" /> </dynamicDiscovery> 如果您的部署服務器安裝有 Visual Studio .NET,則 Web 根文件夾將包含默認的發現文件 (default.vsdisco),該文件是在 Visual Studio .Net 的安裝過程中創建的。如果服務器中包含此文件並且在 Machine.config 文件中啟用了發現功能,則可以發現服務器上的所有 XML Web services。如果要禁止發現 XML Web services,則需要刪除此文件。
警告:如果部署服務器安裝了 Visual Studio .Net,則在服務器投入使用之前應該刪除 default.vsdisco 文件。 建議您不要在已安裝 Visual Studio .NET 的服務器上部署 XML Web services。Visual Studio .NET 安裝程序會將可以使用的文件和用戶都添加到您的系統上。您可以保護已安裝 Visual Studio .NET 的系統的安全,但是,如果不需要在部署服務器上安裝 Visual Studio .Net,建議您不要安裝。 有關啟用動態發現的詳細信息,請參閱 Enabling Discovery for an XML Web services(英文)和 Fine-Tuning Discovery Mechanisms(英文)。
匿名 無需用戶提供任何標識信息。此方法適用於包含公共內容的 Web 站點。如果需要個性化站點,則可以使用 cookIE。有關在 ASP.Net 應用程序中使用 cookIE 的詳細信息,請參閱 Introduction to Web Forms State Management(英文)。 窗體 應用程序向用戶提供一個登錄窗體,要求用戶提供登錄信息(如姓名和密碼)。窗體將被發送回服務器,服務器將該信息與數據倉庫進行比較。 基本 基本身份驗證是使用 Internet 信息服務 (IIS) 配置的,大部分浏覽器都支持基本身份驗證。如果啟用,浏覽器將提示用戶輸入姓名和密碼,然後用 Base64 編碼(此編碼易於解密)將信息傳回 ASP.NET 應用程序。此方法要求用戶擁有 Windows 帳戶。如果在基本身份驗證之外再使用安全套接字層 (SSL),則可以確保此身份驗證方法的安全性。有關 ASP.Net 中的 SSL 支持的信息,請參閱 Using Secure Sockets Layer(英文)。 簡要 簡要身份驗證是使用 IIS 配置的,可用於運行 Microsoft Windows® 2000 或 Windows XP 的服務器。簡要身份驗證提供了比基本身份驗證更高的密碼加密級別。此方法要求用戶擁有存儲在 Microsoft Active Directory® 中的 Windows 帳戶。 集成 Windows 集成 Windows 身份驗證類似於基本身份驗證和簡要身份驗證,唯一區別是用戶的姓名和密碼不傳回 Web 應用程序。此方法尤其適用於 Intranet 環境。它要求用戶擁有 Windows 帳戶,並且只有 Internet Explorer 浏覽器支持該方法。 證書 證書是安裝在計算機中的數字密鑰。當用戶試圖訪問服務器時,需要提供此密鑰。然後服務器在域或 Active Directory 中對該證書進行驗證。此方法適用於那些需要高度安全性而不惜付出管理證書成本的應用程序。 Passport Microsoft 提供了這種集中的身份驗證服務。Passport 身份驗證適用於以下情況:當您的 Web 站點與其他 Passport 站點一起使用時,使用戶只需登錄一次就能夠訪問所有站點;或者您不想維護用戶數據庫。 身份驗證允許您為應用程序的用戶授權,但這並不足以使用戶能夠訪問資源,例如文件和數據庫。您可以對資源進行配置,使其對特定的用戶(而不是 Web 應用程序本身)可用。在這種情況下,可以使用模擬來允許用戶訪問這些資源。使用模擬時,服務器進程以通過身份驗證的用戶標識來運行。當應用程序使用模擬並查詢數據庫時,數據庫應用程序在處理查詢時會認為查詢來自用戶,而不是服務器。如下例所示,可以通過在應用程序的 Web.config 文件中設置 identity 元素的 impersonate 屬性來啟用模擬。Web.config 文件作為每個 Web 應用程序項目的一部分而創建。
有關選擇和實施身份驗證方法的詳細論述,請參閱 Authentication in ASP.NET:.Net Security Guidance(英文)。有關 Web 應用程序安全性的詳細信息,請參閱 Web Application Security at Run Time(英文)。
ASPNET 進程標識 當 Web 應用程序開始在服務器上運行時,它並不是像以您(Web 應用程序的作者)的身份登錄那樣運行。而是像使用服務器上定義的一個 Windows 用戶帳戶登錄那樣運行。該帳戶(也稱作標識)可以是以下三個帳戶之一:ASPNET 標識、SYSTEM 標識或自定義標識。該標識是在 Machine.config XML 文件(位於服務器的 \%Windows%\Microsoft.Net\Framework\Version\Config 文件夾中)中指定的。以下所示是該元素三種配置方法的簡化示例。文件中的元素具有若干個屬性,此示例中並未顯示出來。
可以在部署程序包中使用自定義操作來更改 ACL。有關詳細信息,請參閱 Custom Actions(英文)。 可以使用第三方工具來跟蹤和查找所做的更改。 可能需要同系統管理員確認每一個設置。您需要記錄進行更改的原因,以及為什麼必須通過更改設置來達到目的。 使用 ASPNET 標識進行調試 調試 XML Web services 時,如果在 Machine.config 文件中定義了 ASPNET 標識,將使用該標識來調用此 XML Web services。默認情況下,ASPNET 標識不是 Debugger Users 組的成員(請參見下一節“Visual Studio .Net 開發環境中的安全機制”),因此不能在調試過程中訪問 XML Web services 代碼。要調試 XML Web services,請打開 XML Web services 的代碼並設置一個斷點。
建議您在測試計算機(而不是部署計算機)上進行調試。這將在下一節“Visual Studio .Net 開發環境中的安全機制”中討論。
有關配置進程標識的詳細信息,請參閱 ASP.NET Process Identity(英文)和 ASP.Net Impersonation(英文)。
Visual Studio .Net 開發環境中的安全機制 除了保護服務器的安全外,還要保護開發計算機免受惡意代碼的攻擊和數據破壞。您可以利用開發環境中的多種機制來保護開發服務器的安全:
VS Developers 和 Debuggers 安裝 Visual Studio .Net 時將添加這兩個帳戶組。VS Developers 組具有在服務器上創建和開發 Web 應用程序的必要文件、共享和 IIS 權限。Debuggers 組可以在特定計算機(本地或遠程)上調試進程。這兩個組都是服務器上具有很大權限的用戶,可以訪問大多數資源。有關詳細信息,請參閱 Web Application Security at Design Time in Visual Studio(英文)。
調試 建議您在測試計算機(而不是部署計算機)上進行調試。如果必須在部署服務器上調試,請僅安裝遠程調試組件,並在完成調試後卸載該組件。請在脫機狀態下調試服務器。有關詳細信息,請參閱 Introduction to Web Application Debugging(英文)。
部署 對於大多數應用程序,只需要在服務器上安裝 .NET 框架就足夠了。如果在部署計算機上安裝了 Visual Studio .NET 或 Visual Studio .Net 服務器組件,則 VS Developers 組和 Debuggers 組都將出現在部署計算機上。您需要對 VS Developers 的成員和 Debugger 用戶加以限制。此外,可能還需要禁用動態發現。
警告:強烈建議您不要在部署服務器上安裝 Visual Studio。 Visual Studio .Net 的“復制項目”功能包括使用配置文件 (Web.config) 部署應用程序的選項,該配置文件不同於開發中所使用的配置文件。開發文件可能啟用了調試,在部署後,將允許用戶在引發異常時檢查調用堆棧。建議您使用不允許調試的配置文件進行部署。
總結 保護資源的安全是一個涉及多種技術和整個開發周期的過程。通過對應用程序進行周密的設計、實現、測試和部署,您可以創建非常安全的應用程序。可以使用由 ASP.Net、操作系統和 Web 浏覽器提供的安全技術來保護應用程序的安全。