Visual Basic .NET 和 Visual C# .NET 程式員需要解決的安全問題(二)

來源:互聯網
上載者:User
http://faq.lvjiyong.com/category/dotnet/3/
其他資源
除了上面的概述中介紹的內容外,還有許多其他內容可供選擇。以下主題更詳細地討論了程式碼存取安全性:

Introduction to Code Access Security(英文)
Code Access Security(英文)
Security Namespaces in Visual Studio(英文)
Web 應用程式
解決 Web 應用程式的安全問題,可以保護您的伺服器免受惡意代碼的攻擊,並保護資料不被破壞。您可以使用多種方法來保護伺服器。

通過禁用 XML Web services 的動態發現功能來禁止使用者尋找和運行您的 XML Web services。
在允許使用者訪問伺服器之前,通過身分識別驗證來驗證使用者的標識。
通過使用 ASPNET 進程標識,可以更好地調整使用者可以使用的資源。
下面將詳細討論每一種方法。

動態發現
動態發現是 .NET 架構的一項功能,它允許 網頁瀏覽器尋找在伺服器上啟動並執行 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 應用程式將以匿名模式運行,也就是說,應用程式不需要任何有關使用者標識的資訊。這對於那些包含公用資訊的網站非常適用。如果要對訪問應用程式或其他資源的使用者進行控制,則需要嚮應用程式添加身分識別驗證。身分識別驗證是識別應用程式的使用者並驗證該使用者是否有權訪問此應用程式的過程。ASP.NET 支援多種驗證方法。其中最常用的方法有:

匿名   無需使用者提供任何標識資訊。此方法適用於包含公用內容的 Web 網站。如果需要個人化網站,則可以使用 cookie。有關在 ASP.NET 應用程式中使用 cookie 的詳細資料,請參閱 Introduction to Web Forms State Management(英文)。
表單   應用程式向使用者提供一個登入表單,要求使用者提供登入資訊(如姓名和密碼)。表單將被發送回伺服器,伺服器將該資訊與資料倉儲進行比較。
基本   基本驗證是使用 Internet 資訊服務 (IIS) 配置的,大部分瀏覽器都支援基本驗證。如果啟用,瀏覽器將提示使用者輸入姓名和密碼,然後用 Base 64 編碼(此編碼易於解密)將資訊傳回 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 應用程式項目的一部分而建立。

<identity impersonate="true">
比類比更進一步的是委託,委託在訪問遠端資源(其他電腦)時使用使用者標識。如下表所示,並非所有的驗證方法都支援委託。

支援委託 不支援委託
基本 匿名
整合 Windows 簡要
認證 Passport
  表單

有關選擇和實施驗證方法的詳細論述,請參閱 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 檔案夾中)中指定的。以下所示是該元素三種配置方法的簡化樣本。檔案中的元素具有若干個屬性,此樣本中並未顯示出來。

<!-- 選擇 ASPNET 標識 -->
<system.web>
  <processModel enable="true" username="MACHINE" password="AutoGenerate"/>
</system.web>

<!-- 選擇 SYSTEM 標識 -->
<system.web>
  <processModel enable="true" username="SYSTEM" password="AutoGenerate"/>
</system.web>

<!-- 選擇自訂標識 -->
<system.web>
  <processModel enable="true" username="domain\user" password="pwd"/>
</system.web>
ASPNET 是在隨 .NET 架構安裝 machine.config 檔案時所選擇的預設標識。ASPNET 帳戶是 Users 組的成員,預設情況下,Users 組只擁有最小的許可權。ASPNET 帳戶還擁有其他幾個許可權,其中包括對 ASP.NET 和 Windows 臨時目錄的全部許可權。

如果將標識更改為 SYSTEM,則應用程式將在 SYSTEM 標識下運行,該標識擁有 Administrators 組的許可權。SYSTEM 帳戶幾乎可以訪問伺服器上的所有資源。

警告:如果伺服器在 SYSTEM 標識下運行,受惡意代碼攻擊和資料遭到破壞的危險非常大。
要使用自訂標識,必須建立帳戶並按特定方式配置其許可權。有關建立自訂標識的詳細資料,請參閱 Authentication in ASP.NET:.NET Security Guidelines(英文)。

預設情況下,有幾種系統資源對 ASPNET 帳戶不可用。下面概要介紹了常見的限制和解決方案。建議您使用 ASPNET 帳戶和所介紹的解決方案,而不要在 SYSTEM 標識下運行應用程式。

檔案資源   可以通過 Windows 資源管理員訪問各個檔案和檔案夾的存取控制清單 (ACL),來調整授予 ASPNET 帳戶的檔案和檔案夾許可權。對 ASPNET 的 ACL 的更改不會自動通過部署傳播。例如,您可能允許 ASPNET 帳戶對開發電腦上的 c:\picture.bmp 檔案擁有寫入許可權。當部署應用程式時,應用程式將在另一台電腦上運行,該電腦也具有 ASPNET 帳戶。您需要在部署電腦上為 ASPNET 帳戶添加對部署電腦上 c:\picture.bmp 檔案的寫入許可權。幸運的是,您可以在部署項目中使用自訂動作對 ACL 變更,但必須對所要做的更改進行跟蹤。
事件記錄   ASPNET 帳戶可以向現有日誌添加條目,但不能建立新的事件記錄類別。這時您可以在使用 ASPNET 帳戶時啟用類比,以便建立新的事件記錄類別。類比標識必須具有足夠的許可權才能建立事件記錄類別。如果應用程式需要的事件記錄可以在投入使用前指定,則可以由部署項目來建立這些日誌。
目錄服務和 Active Directory   要對它們進行訪問,需要使用類比和委託,或者將特定的安全憑據傳遞給 DirectoryEntry 對象。如果選擇將特定安全憑據傳遞給 DirectoryEntry 對象,則需要確保已正確儲存此資訊。
效能計數器   ASPNET 帳戶只能寫入而不能讀取效能計數器,並且不能建立新的效能計數器類別。這時您可以在使用 ASPNET 帳戶時啟用類比,以便建立新的效能計數器類別。類比標識必須具有足夠的許可權才能建立效能計數器類別。如果應用程式需要的效能計數器可以在投入使用前指定,則可以由部署項目來建立這些效能計數器。
在 ASPNET 標識下運行時保護檔案資源的安全
注意:本節中的說明適用於運行 NTFS 檔案系統的系統。如果您的伺服器啟動並執行是 FAT32 檔案系統,請參閱檔案系統說明檔案,瞭解有關保護檔案安全的資訊。
預設情況下,ASPNET 帳戶只擁有 Users 組的讀取和執行許可權。如果 Web 應用程式需要寫入或建立新檔案,則可以通過修改存取控制清單 (ACL) 為特定檔案和檔案夾授權。要訪問某個檔案的 ACL,可以在 Windows 資源管理員中右擊該檔案,然後依次選擇“屬性”和“安全”選項卡。最好是修改特定檔案的 ACL,而不是向 ASPNET 帳戶添加通用許可權。最常使用的許可權包括:

讀取 - 資料檔案和可執行檔需要讀取許可權。
寫入 - 由應用程式更新的資料檔案需要寫入許可權。
執行 - 在 Web 應用程式中,.asmx 檔案為可執行檔。
建立 - 要建立檔案,需要為要在其中建立檔案的檔案夾添加建立許可權。
這些許可權適用於:

檔案
檔案夾
警告:應避免允許對同一檔案或目錄同時擁有執行許可權和寫入或建立許可權。在這種情況下,使用者可能會設法在檔案中寫入惡意代碼,然後再執行。
以下是有關簡化授權過程的一些技巧:

根據應用程式中檔案所需的許可權,將檔案分別放入不同的目錄。例如,如果在一個目錄中只存放讀取/執行檔案,則只需要為一個目錄設定這些許可權,而不必單獨為每個檔案設定許可權。請考慮在應用程式中為讀取/執行、讀取/寫入和讀取/建立許可權分別建立目錄。
應用程式可以包含在部署時為空白的資料檔案,還可以包含首次運行應用程式時建立檔案所需的代碼。這需要為目錄添加建立許可權,這是一種較高的安全設定。為了避免添加代碼來建立新的空檔案,請考慮在部署時即給應用程式提供一個空檔案。這樣,您只需給該檔案添加寫入許可權,而不必給目錄添加建立許可權。
在開發應用程式時,您將為開發電腦上的檔案和目錄添加許可權,以便精確調整應用程式的安全層級。不幸的是,ACL 不會被傳遞到部署電腦上的相應檔案。要規劃傳遞這些 ACL,請記住以下幾點:

可以在部署程式包中使用自訂動作來更改 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、作業系統和 網頁瀏覽器提供的安全技術來保護應用程式的安全。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.