Khi tôi bắt đầu viết các câu lệnh SQL đầu tiên trong các chương trình của mình, tôi cảm thấy khá thoải mái khi bảo vệ bản thân khỏi SQL Injection với một phương thức rất đơn giản mà một đồng nghiệp chỉ cho tôi. Nó thay thế tất cả các dấu nháy đơn với hai dấu nháy đơn.Các câu lệnh SQL tham số so với phương thức rất đơn giản
Vì vậy, ví dụ: có một trường tìm kiếm mà bạn có thể nhập tên người dùng để tìm kiếm trong tùy chỉnh. Nếu bạn sẽ nhập
Phêrô làm tóc
câu lệnh SELECT sẽ trông như thế
SELECT *
FROM Customers
WHERE Customername = 'Peter''s Barbershop'
Nếu bây giờ là một kẻ tấn công sẽ chèn này:
';DROP TABLE FOO; --
Những tuyên bố sẽ xem xét như:
SELECT *
FROM Customers
WHERE Customername = ''';DROP TABLE FOO;--'
Nó sẽ không thả bất kỳ bảng, nhưng tìm kiếm trên customertable cho CustomerName '; DROP TABLE FOO; - đó, tôi cho rằng, sẽ không thể được tìm thấy ;-)
Bây giờ sau một thời gian viết báo cáo và bảo vệ bản thân mình chống lại SQL-Injection bằng phương pháp này, tôi đọc rằng nhiều nhà phát triển sử dụng các câu lệnh được tham số hóa, nhưng tôi chưa bao giờ đọc một bài viết mà phương thức "của chúng tôi" đã được sử dụng. Vì vậy, chắc chắn có một lý do chính đáng cho nó.
Kịch bản nào sẽ tham số hóa các câu lệnh được bao gồm nhưng phương pháp của chúng tôi không? Lợi thế của các câu lệnh được tham số hóa so với phương pháp của chúng ta là gì?
Cảm ơn
Philipp
Ví dụ "Không quan tâm" không hoạt động đối với MS SQL Server 2005 và 2008. Chúng chấp nhận chuỗi dài hơn nếu có dấu ngoặc kép trong đó. Nhưng +1 và chấp nhận câu trả lời cho 3 điểm đầu tiên. –