隱私權和資料安全性
如何保護及管理 ADO.NET 應用程式中的機密資訊,是依據建立資訊時所使用的基礎產品及技術而定。 ADO.NET 並未直接針對資料的保護或加密提供服務。
加密和雜湊程式碼
您可以從 ADO.NET 應用程式使用 .NET Framework System.Security.Cryptography 命名空間 (Namespace) 中的類別 (Class),以防止未獲授權的第三方讀取或修改資料。 某些類別是 Unmanaged Microsoft CryptoAPI 的包裝函式,某些則是 Managed 實作 (Implementation)。 密碼編譯服務主題中提供了 .NET Framework 的密碼編譯概觀、描述如何實作密碼編譯,以及如何執行特定的密碼編譯工作。
加密可進行先加密再解密資料;而雜湊資料則是單向的處理序。 當您想要檢查資料未經改變,以防止他人篡改資料時,雜湊資料很有用:提供相同的輸入字串,雜湊演算法一定可以產生相同且簡短的輸出值,讓您輕鬆進行比較。 確保具有雜湊碼的資料完整性說明如何產生及驗證雜湊值。
加密組態檔
保護應用程式時的最重要目標之一就是保護資料來源的存取。 連接字串如果沒有受到保護,就可能造成安全性漏洞。 儲存在組態檔中的連接字串會儲存在標準的 XML 檔案中,.NET Framework 已為其定義了共用元素組。 受保護的組態可用於加密組態檔中的機密資訊。 雖然主要是針對 ASP.NET 應用程式所設計,但這項功能仍可用來加密 Windows 應用程式中的組態檔區段。 如需詳細資訊,請參閱保護連線資訊。
保護記憶體中的字串值
如果 String 物件包含密碼、信用卡號或個人資料等機密資訊,則這些資訊有可能會在使用後洩漏,因為應用程式無法從電腦記憶體刪除這些資料。
String 是不可變的;它的值一旦建立就無法修改。 看似修改字串值的變更,實際上是在記憶體中建立 String 物件的新執行個體 (Instance) 並以純文字儲存資料。 此外也無法預測這些執行個體何時會從記憶體刪除。 字串的記憶體回收,是無法用 .NET 記憶體回收決定的。 如果資料真的十分機密,您應該避免使用 String 和 StringBuilder 類別。
SecureString 類別提供加密文字的方法,可用於在記憶體中使用「資料保護 API」(DPAPI) 加密文字。 之後在不再需要字串時,就可以將它從記憶體刪除。 沒有可用於快速讀取 ToString
內容的 SecureString 方法。 您可以不使用任何值來初始化 SecureString
的新執行個體,或者將 Char 物件陣列的指標傳送給該項目來進行初始化。 之後就可以使用該類別的各種方法來使用字串。
另請參閱
- 設定 ADO.NET 應用程式的安全性
- SQL Server 安全性
- ADO.NET 概觀 \(部分機器翻譯\)