Sử dụng SqlParameters
là phương pháp được đề xuất để ngăn SQL Injection trong truy vấn cơ sở dữ liệu của bạn. Tôi có thể tìm mã/chức năng mà nội bộ làm vệ sinh các thông số này ở đâu? Tôi muốn tái sử dụng chức năng này trong một triển khai tùy chỉnh của tôi. Tôi đã cố gắng tìm nó bằng cách sử dụng Reflector, nhưng đã không thành công.SqlCommand khử trùng các thông số như thế nào?
Trả lời
Nó bảo vệ chống lại SQL Injection, không phải XSS và không có mã hoặc chức năng làm vệ sinh dữ liệu tham số.
Việc bảo vệ được thực hiện bằng cách truyền các giá trị tham số đến máy chủ tách biệt với chuỗi truy vấn, sao cho các giá trị là không bao giờ thay thế trực tiếp vào câu lệnh sql.
Vì vậy, thay vì máy chủ sql chạy một cái gì đó như thế này:
SELECT * FROM [table] WHERE [column] = ParameterValue
Nó Hơn nữa, nếu như nó chạy một cái gì đó như thế này:
DECLARE @ParamValue int
-- //@ParamValue variable is populated from the framework in a safe way
SELECT * FROM [table] WHERE [column] = @ParamValue
Đây là nhanh hơn và an toàn hơn nhiều và mạnh mẽ hơn so với một chức năng sẽ phải đánh giá dữ liệu tham số. Một hàm như vậy sẽ cần phải rất phức tạp (đọc: dễ bị lỗi) để xử lý những thứ như custom escape characters và các cải tiến trong tương lai.
Các bước bên gọn gàng này là toàn bộ vấn đề: dữ liệu là dữ liệu, mã là mã và không bao giờ cả hai phải đáp ứng.
bình luận của bạn cho người khác, bây giờ bị xóa, câu trả lời:
Nếu tôi vượt qua trong các giá trị O'Rourke, nó mã hóa nó được O''Rourke để nó không phá vỡ truy vấn. Chính xác?
Không, điều đó không chính xác. Biến được tạo trực tiếp từ một khối dữ liệu và do đó không cần phải thoát hoặc mã hóa đặc biệt.
OK, có ý nghĩa, cảm ơn. "// @ ParamValue biến được điền từ khung theo cách an toàn" cách này được điền theo cách an toàn sau đó? –
Nó không phải sql - biến được tạo bởi máy chủ sql từ khối _data_ được truyền từ máy khách, nhưng nó được giữ trong một đoạn dữ liệu và không bao giờ được coi là mã, và vì vậy dữ liệu không cần phải được thoát hoặc được mã hóa. –
Bạn có biết bất kỳ tài liệu chi tiết nào về vấn đề này không? Tôi thực sự muốn hiểu toàn bộ quá trình. –
- 1. Làm cách nào để khử trùng cin?
- 2. solr khử trùng truy vấn
- 3. $ khử trùng Tuỳ chỉnh Whitelist
- 4. SqlCommand Các thông số kích thước nhầm lẫn
- 5. Sử dụng caja để khử trùng Javascript?
- 6. Các thư viện .NET để khử trùng đầu vào?
- 7. cách codeigniter khử trùng đầu vào?
- 8. Trình biên tập WMD khử trùng
- 9. Tôi làm cách nào để dệt và khử trùng html?
- 10. Làm thế nào để tái sử dụng tham số SqlCommand thông qua mỗi lần lặp?
- 11. Sử dụng máy học để khử trùng dữ liệu
- 12. Rails Gem khử trùng - Làm thế nào để tạo danh sách trắng &
- 13. Các tham số tối đa SqlCommand ngoại lệ tại thông số 2099
- 14. Làm thế nào để khử trùng SQL mà không sử dụng chuẩn bị phát biểu
- 15. Làm thế nào để sử dụng bộ lọc khử trùng của gcc v4.8.1?
- 16. ruby-pg khử trùng dữ liệu trước khi chèn
- 17. Trình khử trùng HTML đơn giản trong Javascript
- 18. khử trùng/thoát ra khỏi drupal arg (x) cần thiết?
- 19. Làm thế nào để khử trùng mã HTML trong Java để ngăn chặn các cuộc tấn công XSS?
- 20. Cách tốt nhất để khử trùng các trường trong ruby trên đường ray
- 21. Ruby on Rails: Làm thế nào để khử trùng một chuỗi cho SQL khi không sử dụng tìm?
- 22. Làm thế nào để khử trùng hoàn toàn một chuỗi ký tự không hợp lệ trong python?
- 23. Mảng và Rvalues (như các thông số)
- 24. Cách tốt nhất để khử trùng đầu vào trong Java webapp
- 25. Danh sách chuỗi trong SqlCommand thông qua tham số trong C#
- 26. Sử dụng lại SqlCommand?
- 27. Các thông số được chuyển khi gọi Printf từ bit asm 64 bit như thế nào?
- 28. Điều quan trọng là viết các thông số chức năng như thế nào?
- 29. URL https với thông số mã thông báo: an toàn như thế nào?
- 30. SqlCommand hoặc SqlDataAdapter?
Câu hỏi hay - điều quan trọng là phải hiểu mức độ bảo mật được cung cấp bởi việc sử dụng các truy vấn được tham số hóa đến mức nào. – RedFilter