Có, một trích dẫn là ký tự thoát duy nhất để bạn là chủ yếu là, nhưng không hoàn toàn ok.
Sử dụng thông số, trong khi tốt nhất, chủ yếu chỉ thực hiện thay thế '
thành ''
mà bạn đang thực hiện thủ công. NHƯNG, họ cũng thực thi độ dài chuỗi tối đa. Tất nhiên, nếu chúng ta đang nói về các tham số không phải chuỗi, chúng sẽ có lợi ích của việc thực thi kiểu dữ liệu (ví dụ: '
không cần phải được thoát cho các kiểu số, ngày/giờ, vv vì nó không hợp lệ cho bắt đầu bằng).
Sự cố bạn vẫn có thể bị bỏ qua là một tập con của SQL Injection được gọi là Cắt ngắn SQL. Ý tưởng là để buộc một số phần của sql động ra khỏi cuối chuỗi. Tôi không chắc chắn khả năng điều này xảy ra trong thực tế, nhưng, tùy thuộc vào cách thức và nơi bạn đang xây dựng sql động, bạn cần đảm bảo rằng biến giữ SQL động để thực thi đủ lớn để giữ các phần tử tĩnh trong mã của bạn cộng với tất cả các biến giả sử chúng được gửi ở độ dài tối đa của chúng.
Đây là một bài viết từ Tạp chí MSDN, New SQL Truncation Attacks And How To Avoid Them, hiển thị cả SQL Injection thông thường lẫn SQL Truncation. Bạn sẽ thấy trong bài viết để tránh SQL Injection họ chủ yếu chỉ làm phương thức REPLACE(@variable, '''', '''''')
, nhưng cũng hiển thị sử dụng QUOTENAME(@variable, '[')
cho một số trường hợp.
EDIT (2015/01/20): Dưới đây là một nguồn lực tốt, mặc dù không cụ thể cho SQL Server, mà chi tiết nhiều loại hình SQL Injection: https://www.owasp.org/index.php/Testing_for_SQL_Injection_(OTG-INPVAL-005)
Bài viết sau đây có liên quan đến một ở trên . Đây là một trong những cụ thể cho SQL Server, nhưng tổng quát hơn về an ninh tổng thể. Có phần liên quan đến SQL Injection:
https://www.owasp.org/index.php/Testing_for_SQL_Server
Nguồn
2014-12-02 15:23:17
Người ta có thể thay thế các nhân vật báo duy nhất với đại diện thập lục phân của nó, hoặc đại diện Unicode của nó, hoặc một thực thể lừa "vệ sinh" của bạn bằng cách dự đoán hành vi đó và sử dụng số hợp lý dấu nháy đơn để "vệ sinh" của bạn hoàn toàn thất bại .... ** nghiêm túc **: không làm điều này. *** KHÔNG BAO GIỜ BAO GIỜ *** - sử dụng parmaeters - *** LUÔN LUÔN *** –
@marc_s Hãy viết một câu lệnh chèn chèn 1000 dòng với 50 trường. Nếu bạn có thể làm điều đó (gợi ý: bạn có thể không) sau đó tôi gọi đó là một bình luận tốt. Nếu không thì: dốt nát. Số lượng tham số bị giới hạn và có những trường hợp tốt để sử dụng một cách tiếp cận khác, đôi khi. – TomTom
Nếu bạn đang làm điều đó TomTom sử dụng SQLBulkCopy - marc_s là đúng, ít nhất là liên quan đến việc sử dụng các thông số – Swomble