Truyền các tham số cho SQL giúp bạn không phải tạo một chuỗi SQL động.
Việc xây dựng các câu lệnh SQL động là một rủi ro bảo mật LỚN vì mọi người có thể đưa mã SQL của riêng họ vào ứng dụng của bạn, có thể thực hiện các lệnh không mong muốn đối với dữ liệu của bạn.
Có một số mẫu hay về các cuộc tấn công SQL Injection có thể xảy ra tại:
Ví dụ về tấn công SQL Injection
Có hai cách để truyền tham số cho câu lệnh SQL. Một là sử dụng Thủ tục lưu trữ như bạn đã đề cập. Cách khác là sử dụng các truy vấn được tham số hóa (thực sự là những gì tôi thích).
Một truy vấn được tham số hóa thực sự khá dễ dàng trong .NET:
using(SqlConnection conn = new SqlConnection(connString))
{
SqlCommand command =
new SqlCommand("SELECT * FROM Users WHERE Username = @Username", conn);
command.Parameters.Add(new SqlParameter("@Username", "Justin Niessner"));
SqlDataAdapter adapter = new SqlDataAdapter(command);
DataTable dt = new DataTable();
adapter.Fill(dt);
}
Trong ví dụ đó, tham số là @Username
và chúng tôi đã sử dụng Parameters
tập hợp SqlCommand
đối tượng để chuyển vào giá trị.