首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> ASP.NET 基礎 >> 關於ASP.NET

ASP.NET 2.0 Web.config 敏感資訊加密完整指南

     編輯:關於ASP.NET

一、簡介

建立 ASP.NET 2.0 應用程式時,開發人員通常將敏感設定資訊儲存在 Web.config 檔案中。最典型範例是資料庫連接字串,其他還包括 SMTP 伺服器連線資訊、用戶憑證資料等。雖然預設可配置 ASP.NET 拒絕所有對 .config 副檔名檔案的 HTTP 請求,但若駭客能存取 Web 伺服器檔案系統,Web.config 中的敏感資訊仍可能被竊取。例如,不小心允許匿名 FTP 存取網站,駭客即可透過 FTP 協定下載 Web.config。

所幸,ASP.NET 2.0 允許加密 Web.config 中選擇的區段(如 <connectionStrings> 區段或自訂 config 區段)來緩解此問題。設定區段可輕易使用程式碼或 aspnet_regiis.exe(命令列程式)預先加密。一旦加密,Web.config 設定即可避開「虎視眈眈」的眼睛。而且,當以程式設計方式從 ASP.NET 頁面檢索加密設定時,ASP.NET 會自動解密讀取的加密區段。簡言之,設定資訊加密後,無需在應用程式中撰寫額外程式碼或採取進一步行動即可使用加密資料。

本文將討論如何以程式設計方式加密與解密設定區段,分析命令列程式 aspnet_regiis.exe 用法,評估 ASP.NET 2.0 提供的加密選項,並簡略討論 ASP.NET 1.x 中如何加密設定資訊。

二、前提

開始探討如何加密 ASP.NET 2.0 設定資訊前,請記住以下幾點:

  1. 所有加密形式都包含某種秘密,加密與解密資料時都要使用此秘密。對稱加密演算法加密與解密訊息使用同一把金鑰,非對稱加密演算法則使用不同金鑰。無論何種技術,最重要的是解密金鑰的安全保存程度。
  2. ASP.NET 2.0 提供的設定加密技術設計目的在於阻止能以某種方式檢索設定檔的駭客。其實現思路是:若駭客電腦上有你的 Web.config,他無法破解加密區段。然而,當 Web 伺服器上 ASP.NET 頁面從加密設定檔請求資訊時,資料必須解密才能使用(此時不需你撰寫程式碼)。因此,若駭客能上傳能查詢設定檔並顯示結果的 ASP.NET 網頁到你的系統,他就能以純文字方式查看加密設定。(詳細情況請參考本文提供的範例 ASP.NET 頁面,展示加密與解密 Web.config 各區段方法;可見 ASP.NET 頁面能存取並顯示加密資料的純文字形式)
  3. 加密與解密設定資訊需付出效能代價。因此通常僅加密包含敏感資訊的設定區段。例如,可能不需加密 <compilation> 或 <authorization> 設定區段。

三、加密何種資訊

分析如何加密 ASP.NET 2.0 設定資訊前,先看能加密什麼設定資訊。使用 .NET Framework 2.0 提供的函式庫,開發人員能加密 Web.config 或 machine.config 中大多數設定區段。這些區段是作為 <configuration> 或 <system.web> 元素子節點的 XML 元素。例如,下列範例 Web.config 含三個顯式定義的設定區段:

<connectionStrings>,<compilation>和<authentication>。
<?xml version="1.0"?>
<configuration xmlns="https://schemas.microsoft.com/.NetConfiguration/v2.0">
<connectionStrings>
<add name="MembershipConnectionString" connectionString="connectionString"/>
</connectionStrings>
<system.web>
<compilation debug="true"/>
<authentication mode="Forms" />
</system.web>

每個區段都可選擇性加密,透過程式設計方式或 aspnet_regiis.exe 實現。加密後,加密文字直接儲存在設定檔中。例如,加密上述 <connectionStrings> 區段,結果 Web.config 可能如下(因篇幅限制,省略大段 <CipherValue>):

<?xml version="1.0"?>
<configuration xmlns="https://schemas.microsoft.com/.NetConfiguration/v2.0">
<connectionStrings configProtectionProvider="DataProtectionConfigurationProvider">
<EncryptedData>
<CipherData>
<CipherValue>AQAAANCMnd8BFdERjHoAwE/Cl+sBAAAAed...GicAlQ==</CipherValue>
</CipherData>
</EncryptedData>
</connectionStrings>
<system.web>
<compilation debug="true"/>
<authentication mode="Forms" />
</system.web>

另外,存在一些無法使用此技術加密的設定區段:

  • <processModel>
  • <runtime>
  • <mscorlib>
  • <startup>
  • <system.runtime.remoting>
  • <configProtectedData>
  • <satelliteassemblies>
  • <cryptographySettings>
  • <cryptoNameMapping>
  • <cryptoClasses>

為加密這些區段,必須加密這些值並存儲在登錄中。有 aspnet_setreg.exe 命令列工具可協助實現此過程;稍後討論此工具。

提示:Web.Config 與 Machine.Config 差異

Web.config 指定特定 Web 應用程式的設定,位於應用程式根目錄;machine.config 指定該 Web 伺服器上所有網站的設定,位於 $WINDOWSDIR$\Microsoft.Net\Framework\Version\CONFIG 目錄。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved