要避免SQL注入風險,可以采取以下措施:
using (SqlConnection connection = new SqlConnection(connectionString))
{
string sqlCommandText = "SELECT * FROM Users WHERE Username = @Username AND Password = @Password";
using (SqlCommand command = new SqlCommand(sqlCommandText, connection))
{
command.Parameters.AddWithValue("@Username", userName);
command.Parameters.AddWithValue("@Password", password);
connection.Open();
using (SqlDataReader reader = command.ExecuteReader())
{
// Process the results
}
}
}
using (SqlConnection connection = new SqlConnection(connectionString))
{
using (SqlCommand command = new SqlCommand("sp_GetUser", connection))
{
command.CommandType = CommandType.StoredProcedure;
command.Parameters.AddWithValue("@Username", userName);
command.Parameters.AddWithValue("@Password", password);
connection.Open();
using (SqlDataReader reader = command.ExecuteReader())
{
// Process the results
}
}
}
using (var context = new MyDbContext())
{
var user = context.Users.FirstOrDefault(u => u.Username == userName && u.Password == password);
// Process the result
}
驗證和清理用戶輸入:在處理用戶輸入之前,進行驗證和清理,例如限制輸入長度、過濾特殊字符等。但請注意,這種方法并非萬能,因為惡意用戶可能會嘗試繞過驗證。
最小權限原則:為數據庫連接分配盡可能低的權限,以限制任何潛在威脅的影響。例如,如果應用程序只需要從數據庫中讀取數據,不要向其授予寫入權限。
保持軟件更新:確保使用的數據庫管理系統、驅動程序和ORM工具都是最新版本,以修復已知的安全漏洞。
通過采取這些措施,可以大大降低C#應用程序中的SQL注入風險。