在C#中,防止SQL注入攻擊的最佳方法是使用參數化查詢(也稱為預編譯語句)
以下是一個使用ADO.NET和參數化查詢來防止SQL注入攻擊的示例:
using System;
using System.Data.SqlClient;
class Program
{
static void Main()
{
string connectionString = "your_connection_string";
string userInput = "user_input_here"; // 假設這是從用戶輸入獲取的數據
using (SqlConnection connection = new SqlConnection(connectionString))
{
connection.Open();
// 使用參數化查詢
using (SqlCommand command = new SqlCommand("SELECT * FROM Users WHERE Username = @Username", connection))
{
// 添加參數并設置其值
SqlParameter parameter = new SqlParameter("@Username", System.Data.SqlDbType.NVarChar, 50);
parameter.Value = userInput;
command.Parameters.Add(parameter);
// 執行查詢
using (SqlDataReader reader = command.ExecuteReader())
{
while (reader.Read())
{
Console.WriteLine($"User ID: {reader["UserID"]}, Username: {reader["Username"]}");
}
}
}
}
}
}
在這個示例中,我們使用了@Username
參數來代替直接將用戶輸入拼接到SQL語句中。這樣可以確保用戶輸入不會被解釋為SQL代碼,從而防止SQL注入攻擊。
除了參數化查詢之外,還可以使用其他方法來防止SQL注入攻擊,例如: