受保護的組態的概觀
更新:2007 年 11 月
您可以使用受保護的組態加密 Web 應用程式組態檔 (例如 Web.config 檔) 中的敏感資訊,其中包含使用者名稱和密碼、資料庫連接字串和加密金鑰。即使攻擊者取得組態檔的存取權,加密組態資訊能夠讓攻擊者不易取得敏感資訊的存取權,而提升應用程式的安全性。
例如,未加密的組態檔可能包含指定用來連接資料庫的連接字串區段,如下列程式碼範例所示:
<configuration>
<connectionStrings>
<add name="SampleSqlServer" connectionString="Data Source=localhost;Integrated Security=SSPI;Initial Catalog=Northwind;" />
</connectionStrings>
</configuration>
使用受保護的組態加密連接字串值的組態檔,不會以純文字方式顯示連接字串,而是以加密格式儲存字串,如下列程式碼範例所示:
<configuration>
<connectionStrings configProtectionProvider="RsaProtectedConfigurationProvider">
<EncryptedData Type="http://www.w3.org/2001/04/xmlenc#Element"
xmlns="http://www.w3.org/2001/04/xmlenc#">
<EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#tripledes-cbc" />
<KeyInfo xmlns="http://www.w3.org/2000/09/xmldsig#">
<EncryptedKey xmlns="http://www.w3.org/2001/04/xmlenc#">
<EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#rsa-1_5" />
<KeyInfo xmlns="http://www.w3.org/2000/09/xmldsig#">
<KeyName>RSA Key</KeyName>
</KeyInfo>
<CipherData>
<CipherValue>RXO/zmmy3sR0iOJoF4ooxkFxwelVYpT0riwP2mYpR3FU+r6BPfvsqb384pohivkyNY7Dm4lPgR2bE9F7k6TblLVJFvnQu7p7d/yjnhzgHwWKMqb0M0t0Y8DOwogkDDXFxs1UxIhtknc+2a7UGtGh6Di3N572qxdfmGfQc7ZbwNE=
</CipherValue>
</CipherData>
</EncryptedKey>
</KeyInfo>
<CipherData>
<CipherValue>KMNKBuV9nOid8pUvdNLY5I8R7BaEGncjkwYgshW8ClKjrXSM7zeIRmAy/cTaniu8Rfk92KVkEK83+UlQd+GQ6pycO3eM8DTM5kCyLcEiJa5XUAQv4KITBNBN6fBXsWrGuEyUDWZYm6Eijl8DqRDb11i+StkBLlHPyyhbnCAsXdz5CaqVuG0obEy2xmnGQ6G3Mzr74j4ifxnyvRq7levA2sBR4lhE5M80Cd5yKEJktcPWZYM99TmyO3KYjtmRW/Ws/XO3z9z1b1KohE5Ok/YX1YV0+Uk4/yuZo0Bjk+rErG505YMfRVtxSJ4ee418ZMfp4vOaqzKrSkHPie3zIR7SuVUeYPFZbcV65BKCUlT4EtPLgi8CHu8bMBQkdWxOnQEIBeY+TerAee/SiBCrA8M/n9bpLlRJkUb+URiGLoaj+XHym//fmCclAcveKlba6vKrcbqhEjsnY2F522yaTHcc1+wXUWqif7rSIPhc0+MT1hB1SZjd8dmPgtZUyzcL51DoChy+hZ4vLzE=
</CipherValue>
</CipherData>
</EncryptedData>
</connectionStrings>
當要求網頁時,.NET Framework 會解密連接字串資訊讓應用程式使用。
注意事項: |
---|
您無法使用受保護的組態加密組態檔的 configProtectedData 區段。您也無法使用受保護的組態,加密並未採用區段處理常式的組態區段,或屬於 Managed 加密組態的一部分之區段。下列是無法使用受保護的組態加密的組態區段清單:processModel、runtime、mscorlib、startup、system.runtime.remoting、configProtectedData、satelliteassemblies、cryptographySettings、cryptoNameMapping 和 cryptoClasses。建議您使用其他方法加密敏感資訊,例如 ASP.NET 設定登錄主控台應用程式 (Aspnet_setreg.exe) 工具,以保護這些組態區段中的敏感資訊。如需 ASP.NET 設定登錄主控台應用程式 (Aspnet_setreg.exe) 的資訊,請參閱在 Microsoft 支援網站中的 Microsoft 知識庫文件 Q329290 <如何使用 ASP.NET 公用程式加密認證及工作階段狀態連線字串> (英文)。 |
安全性注意事項: |
---|
當加密組態資訊載入應用程式使用的記憶體時就會解密。如果應用程式的記憶體受到危害,受保護組態區段的敏感資訊也會受到危害。 |
使用受保護的組態
您可以使用 ASP.NET IIS 註冊工具 (Aspnet_regiis.exe),或 System.Configuration 命名空間中受保護的組態類別管理受保護的組態。
Aspnet_regiis.exe 工具 (位於 %SystemRoot%\Microsoft.NET\Framework\versionNumber 資料夾中) 包含加密和解密 Web.config 檔案區段、建立或刪除金鑰容器、匯出和匯入金鑰容器資訊,以及管理金鑰容器存取權的選項。
請使用 ProtectedConfigurationProvider 類別執行加密和解密 Web.config 檔案的內容。下列清單描述 .NET Framework 中所包含受保護的組態之提供者:
DpapiProtectedConfigurationProvider. 使用 Windows Data Protection API (DPAPI) 加密和解密資料。
RsaProtectedConfigurationProvider,使用 RSA 加密演算法加密和解密資料。
兩種提供者都提供資料的增強式加密。然而,如果您打算在多個伺服器 (例如 Web 伺服陣列) 上使用相同的加密組態檔,則只有 RsaProtectedConfigurationProvider 能夠讓您匯出用來加密資料的加密金鑰,然後在其他伺服器中匯入金鑰。
您可以在應用程式的 Web.config 檔中設定想要使用的 ProtectedConfigurationProvider,或是使用 Machine.config 檔中設定的其中一個 ProtectedConfigurationProvider 執行個體。如需詳細資訊,請參閱指定受保護的組態提供者。
一旦指定所要使用的提供者,就可以加密或解密應用程式的 Web.config 檔案內容。如需詳細資訊,請參閱加密和解密組態區段。
注意事項: |
---|
遵循這些最佳作法能夠保護 Web 應用程式的安全性,重要的是能夠讓您同時使用 Microsoft Windows 和網際網路資訊服務 (IIS) 的最新安全性修補檔案,以及 Microsoft SQL Server 或其他成員資格資料來源的任何安全性修補檔案,將應用程式伺服器維持在最新狀態。如需撰寫安全程式碼和保護應用程式之最佳作法的詳細資訊,請參閱 Michael Howard 和 David LeBlanc 所著的《撰寫安全的程式碼》(英文),以及參閱 Microsoft 典範與實例網站所提供的指南。 |