2010-08-13 31 views
5

Có thể cho một dự án sử dụng hoàn toàn LinqToSQL hoặc Entity Framewok bị SQL injection.Entity Framework, LinqToSQL và sql injection

Tôi nghĩ rằng có lẽ không phải vì SQL mà ORM tạo ra nên được tiêm sql miễn phí. Nhưng tôi không chắc chắn.

+1

bản sao của http://stackoverflow.com/questions/473173/will-using-linq-to-sql-help-prevent-sql -Injection –

+1

Không chính xác trùng lặp vì điều này cũng yêu cầu khung thực thể. Ngoài ra câu trả lời thực sự nói rằng có một khả năng để tấn công trong một số trường hợp –

Trả lời

10

Khi bạn sử dụng các khung như dự định, tức là các thực thể/bảng trực tiếp, sau đó là không. Tất cả các so sánh chuỗi (tức là where name = 'smith') được tham số hóa.

Các điểm dễ bị tổn thương chỉ là:

  • bất kỳ chuỗi có thể được thực hiện trực tiếp chống lại các ngữ cảnh. dbContext.ExecuteQuery(); với bất kỳ loại chuỗi phá hoại nào.

  • một stored procedure thực hiện SQL động sử dụng bất kỳ thông số cho

+1

Trong VS2012 ra khỏi hộp. _ Ở đâu (a => a.column == "Trích dẫn" ") _ đã dịch sang một biến số liên kết _ @ 1 = [Extent1]. [Column] _. Và _ Ở đâu (a => a.column! = "Trích dẫn" ") _ được dịch sang _ N'Quote '' '= [Extent1]. [Column] _ –

3

"Nó phụ thuộc".

Truy vấn LINQ đồng bộ với L2S hoặc thực thể EF được phun an toàn, nhưng bạn luôn có thể gọi thủ tục hoặc chức năng được lưu trữ không được tiêm an toàn.

Đó rõ ràng là một trường hợp cạnh, nhưng có nó xảy ra mà mọi người viết SP/chức năng được mở để tiêm (soạn SQL-in-strings với giá trị tham số bên trong proc).