在 ASP.NET 應用程式開發中,資料庫連接字串通常存放在 web.config 組態檔中,方便程式碼透過 API 直接讀取。然而,這些敏感資訊預設以明文形式儲存,一旦伺服器遭入侵或檔案外洩,資料庫帳號密碼將面臨嚴重安全風險。
連接字串包含資料庫伺服器位址、資料庫名稱、使用者帳號與密碼等關鍵資訊。若以明文儲存,任何擁有檔案讀取權限的人員都能輕易取得完整資料庫存取權限。ASP.NET 2.0 內建的 aspnet_regiis.exe 工具提供簡單有效的加密機制,可保護組態檔中的敏感區段。
aspnet_regiis.exe 位於 .NET Framework 安裝目錄下(通常為 C:\Windows\Microsoft.NET\Framework\v2.0.50727),透過命令列即可完成組態區段的加密與解密操作。
aspnet_regiis -pef "區段名稱" "web.config 所在目錄路徑"
aspnet_regiis -pdf "區段名稱" "web.config 所在目錄路徑"
參數說明:
connectionStrings、appSettings 等<connectionStrings>
<add name="pubsConnectionString"
connectionString="Data Source=MHL\SQL2000;Initial Catalog=pubs;User ID=sa;Password=sql2000"
providerName="System.Data.SqlClient" />
</connectionStrings>
<connectionStrings configProtectionProvider="RsaProtectedConfigurationProvider">
<EncryptedData Type="https://www.w3.org/2001/04/xmlenc#Element"
xmlns="https://www.w3.org/2001/04/xmlenc#">
<EncryptionMethod Algorithm="https://www.w3.org/2001/04/xmlenc#tripledes-cbc" />
<KeyInfo xmlns="https://www.w3.org/2000/09/xmldsig#">
<EncryptedKey xmlns="https://www.w3.org/2001/04/xmlenc#">
<EncryptionMethod Algorithm="https://www.w3.org/2001/04/xmlenc#rsa-1_5" />
<KeyInfo xmlns="https://www.w3.org/2000/09/xmldsig#">
<KeyName>Rsa Key</KeyName>
</KeyInfo>
<CipherData>
<CipherValue>e15rhABrAtua53kjZ2a3U+ijC/Hr5ZhGUWGL5swkfxJaHS6hxGacw7CxyNlhnJwRc44ZE2edsKRfSJeXPS76fe4znlE5BqaxMMMWK+yFMiuWM+Cor1DFffheRNjAB7pMYdRQoMRCBq6H18gxIGlRY1dXtUERzNLJ5ug+S/qdj8E=</CipherValue>
</CipherData>
</EncryptedKey>
</KeyInfo>
<CipherData>
<CipherValue>Y1SjIK04jc0cS8Fg7EJyLoiXAUWc+I708SOsebWHeihg4kRFEF4wGvQLyrZQqFXNUIm56tIktQgapd7px92nfwAzYFv8R2gYV/7JwjfbjpM1v27p5WgNycJbo8H4uNj4LwgPfoqy2Dl41geMFHXCOak8IWxrA8MkbpIsKHFTJNkMo9yph+vVUMdViwaBSOKONSrXJ2k16kjHoSjJe1VP6WfMFZCeL7+nMuLf4sNZc34d0fl3S50H+kNwZre9MkUCSLr5pImCv5fhgHP+Ee9QwS8ahvOvRwUY7kWMr+M+jKoS+FDbhuRIkcbWaPP75XzdmyBN/vGwcMfX63faA9vdNOsl1a75Kd0L</CipherValue>
</CipherData>
</EncryptedData>
</connectionStrings>
connectionStrings 外,appSettings、system.net/mailSettings 等同樣適用開啟瀏覽器存取網站,若頁面正常顯示資料,代表執行階段成功自動解密。若出現「無法解密」錯誤,請檢查金鑰容器權限或嘗試重新匯入金鑰。
透過這項內建機制,開發者無需撰寫額外程式碼,即可大幅提升組態檔安全性,符合資安合規需求。