在C#中,使用SqlParameter可以有效防止SQL注入攻擊。SqlParameter會將參數值與SQL查詢分開處理,而不是將參數值直接拼接到SQL查詢字符串中。這樣可以確保參數值不會被解釋為SQL代碼的一部分,從而降低了SQL注入的風險。
以下是如何使用SqlParameter來防止SQL注入的示例:
using System;
using System.Data.SqlClient;
class Program
{
static void Main()
{
string connectionString = "your_connection_string";
string query = "SELECT * FROM Users WHERE Username = @Username AND Password = @Password";
using (SqlConnection connection = new SqlConnection(connectionString))
{
using (SqlCommand command = new SqlCommand(query, connection))
{
// 添加參數
SqlParameter usernameParam = new SqlParameter("@Username", SqlDbType.NVarChar);
usernameParam.Value = "JohnDoe";
command.Parameters.Add(usernameParam);
SqlParameter passwordParam = new SqlParameter("@Password", SqlDbType.NVarChar);
passwordParam.Value = "SecureP@ss";
command.Parameters.Add(passwordParam);
// 打開連接并執行查詢
connection.Open();
using (SqlDataReader reader = command.ExecuteReader())
{
while (reader.Read())
{
Console.WriteLine($"Username: {reader["Username"]}, Password: {reader["Password"]}");
}
}
}
}
}
}
在這個示例中,我們使用了SqlConnection和SqlCommand對象來執行SQL查詢,并通過SqlParameter對象添加了參數。這樣,即使用戶輸入包含惡意SQL代碼,也不會影響到查詢的安全性,因為參數值不會被解釋為SQL代碼的一部分。