處理連接字符串的安全性
1. 數據庫安全性
1.1. 盡量使用 Windows 身份驗證而不是 SQL Server 驗證
– 安全容易管理
–不需要在連接字符串中設置用戶名和密碼
– 可以通過密碼策略保證安全
– 密碼不會通過明文在網絡中傳遞
1.2. 集成 Windows 身份驗證
提供程序 語法
SqlClient Integrated Security=true;
-- or --
Integrated Security=SSPI;
OleDb Integrated Security=SSPI;
Odbc Trusted_Connection=yes;
OracleClient Integrated Security=yes;
1.3. SQL Server 身份驗證
? SQL Server 身份驗證
–強制實施密碼策略
– 強制密碼過期
–用戶在下次登錄時必須更改密碼
2. 定義連接字符串
? Persist Security Info 關鍵字的默認設置為false。
? 如果將其設置為true 或yes,則允許在打開連接後通過連接獲取安全敏感信息(包括用戶ID 和密碼)。
? 保持將PersistSecurity Info 設置為false,以確保不受信任的來源不能訪問敏感的連接字符串信息。
3. 防止註入式攻擊
3.1. 連接字符串註入式攻擊
? 類似於 SQL 註入式攻擊
? 在連接字符串中通過分號(;)來加入其它參數
? 例如:連接字符串通過下面方式拼接:
string constr = “server=(local);database=Northwind;
uid=sa;pwd=“ + password;
而輸入
password=“password01!;Pooling=true;Min Pool Size=999999;Max Pool Size=999999;”
3.2. 連接字符串生成器
? ADO.NET 2.0 為每個 .NET Framework 數據提供程序引入了新的連接字符串生成器
? 從DbConnectionStringBuilder 繼承
提供程序 ConnectionStringBuilder 類
System.Data.SqlClient SqlConnectionStringBuilder
System.Data.OleDb OleDbConnectionStringBuilder
System.Data.Odbc OdbcConnectionStringBuilder
System.Data.OracleClient OracleConnectionStringBuilder
3.3. 避免連接字符串註入式攻擊
System.Data.SqlClient.SqlConnectionStringBuilder builder = new System.Data.SqlClient.SqlConnectionStringBuilder(); builder["Data Source"] = "(local)"; builder["integrated Security"] = true; builder["Initial Catalog"] = "AdventureWorks;NewValue=Bad"; Console.WriteLine(builder.ConnectionString);
輸出結果:
data source=(local);Integrated Security=True; initial
catalog="AdventureWorks;NewValue=Bad"
4. 存儲連接字符串
? 連接字符串可以存儲在
–配置文件
– COM+ Catalog
– Windows 註冊表
– 自定義文件結構
5. 加密連接字符串
? .NET 當中的加密算法
–對稱算法(RSA)
– 非對稱算法(3DES)
–數據保護(DPAPI)
6. 受保護的配置
? 使用受保護配置對連接字符串值進行加密的配置文件不以明文形式顯示連接字符串,而是以加密形式存儲它們
? 在對頁進行請求時,.NET Framework 對連接字符串信息進行解密,並使其可供應用程序使用
6.1. 創建配置
? ASP.NET IIS 註冊工具 (Aspnet_regiis.exe)
– 對Web.config 文件的節進行加密和解密、創建或刪除密鑰容器、導出和導入密鑰容器信息以及管理對密鑰容器的訪問
? System.Configuration 命名空間中的受保護配置類
– DPAPIProtectedConfigurationProvider。使用Windows 數據保護API (DPAPI) 對數據進行加密和解密
– RsaProtectedConfigurationProvider。使用RSA 加密算法對數據進行加密和解密
6.2. 加密與解密 Web 配置節
? 加密Web 配置節
– aspnet_regiis -pe "connectionStrings" -app
"/SampleApplication" -prov
"RsaProtectedConfigurationProvider“
? 解密Web 配置節
– aspnet_regiis -pd "connectionStrings" -app
"/SampleApplication"
處理連接字符串的安全性