Tôi đã giảng cho cả đồng nghiệp của mình và ở đây trên SO về sự tốt đẹp của việc sử dụng các tham số trong các truy vấn SQL, đặc biệt là trong các ứng dụng .NET. Tôi thậm chí đã đi xa đến mức hứa với họ là cung cấp khả năng miễn dịch chống lại các cuộc tấn công SQL injection.
Nhưng tôi bắt đầu tự hỏi liệu điều này có thực sự đúng không. Có bất kỳ cuộc tấn công chèn SQL nào đã biết sẽ thành công đối với một truy vấn được tham số hóa không? Ví dụ, bạn có thể gửi một chuỗi gây tràn bộ đệm trên máy chủ không?
Tất nhiên, có những cân nhắc khác cần thực hiện để đảm bảo rằng một ứng dụng web an toàn (như khử trùng đầu vào của người dùng và tất cả những thứ đó) nhưng bây giờ tôi đang nghĩ đến việc tiêm SQL. Tôi đặc biệt quan tâm đến các cuộc tấn công chống lại MsSQL 2005 và 2008 vì chúng là cơ sở dữ liệu chính của tôi, nhưng tất cả các cơ sở dữ liệu đều thú vị.
Chỉnh sửa: Để làm rõ ý tôi về các tham số và truy vấn được tham số hóa. Bằng cách sử dụng các tham số, ý tôi là sử dụng "biến" thay vì xây dựng truy vấn sql trong một chuỗi.
Vì vậy, thay vì làm điều này:
SELECT * FROM Table WHERE Name = 'a name'
Chúng tôi làm điều này:
SELECT * FROM Table WHERE Name = @Name
và sau đó đặt giá trị của tham số @Name trên đối tượng truy vấn / lệnh.