共用方式為


受保護的組態的概觀

更新: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 中所包含受保護的組態之提供者:

兩種提供者都提供資料的增強式加密。然而,如果您打算在多個伺服器 (例如 Web 伺服陣列) 上使用相同的加密組態檔,則只有 RsaProtectedConfigurationProvider 能夠讓您匯出用來加密資料的加密金鑰,然後在其他伺服器中匯入金鑰。

您可以在應用程式的 Web.config 檔中設定想要使用的 ProtectedConfigurationProvider,或是使用 Machine.config 檔中設定的其中一個 ProtectedConfigurationProvider 執行個體。如需詳細資訊,請參閱指定受保護的組態提供者

一旦指定所要使用的提供者,就可以加密或解密應用程式的 Web.config 檔案內容。如需詳細資訊,請參閱加密和解密組態區段

注意事項:

遵循這些最佳作法能夠保護 Web 應用程式的安全性,重要的是能夠讓您同時使用 Microsoft Windows 和網際網路資訊服務 (IIS) 的最新安全性修補檔案,以及 Microsoft SQL Server 或其他成員資格資料來源的任何安全性修補檔案,將應用程式伺服器維持在最新狀態。如需撰寫安全程式碼和保護應用程式之最佳作法的詳細資訊,請參閱 Michael Howard 和 David LeBlanc 所著的《撰寫安全的程式碼》(英文),以及參閱 Microsoft 典範與實例網站所提供的指南。

請參閱

工作

逐步解說:使用受保護的組態加密組態資訊

其他資源

使用受保護的組態加密組態資訊