2012-01-31 26 views
9

Đây là lần đầu tiên tôi phát triển bằng cách sử dụng MVC và tôi muốn làm cho nó an toàn.Kiểm soát SQL injection trong MVC

Khi tôi sử dụng HtmlEncode, nó chuyển đổi chuỗi thành chuỗi HTML tương đương.

Người dùng có thể nhập vào tìm kiếm ví dụ như ali 'hoặc ali-- và chúng tồn tại trong cơ sở dữ liệu của tôi. Làm thế nào để kiểm soát tìm kiếm của tôi và đăng nhập từ SQL injection xin vui lòng?

Ngoài ra bất kỳ hướng dẫn hoặc phương pháp hay nhất nào để ngăn chặn việc chèn tập lệnh?

+0

cách bạn truy cập cơ sở dữ liệu của mình? LINQ? Khuôn khổ thực? –

+0

Tôi sử dụng bình thường, mà bạn thích LINQ hoặc Entity framework – AMH

+1

Xem [SO link] này (http://stackoverflow.com/questions/8676/entity-framework-vs-linq-to-sql) ... Cả hai sẽ kiểm tra cho tiêm sql cho bạn .... –

Trả lời

15

LINQ và khung pháp nhân đã kiểm tra SQL Injection cho bạn.

Nhưng bạn nên đọc tài liệu anyhow:

LINQ (tấn công phần SQL Injection) MSDN Link

Entity Framework MSDN Link (phần cân nhắc an ninh cho Queries)

Hy vọng nó sẽ giúp!

+0

những gì về tiêm script – AMH

+0

@ AM Tôi tin rằng nên là một câu hỏi khác, nhưng liên kết này có thể hữu ích: [asp tutorials] (http://www.asp.net –

+0

mà bạn thích, xin vui lòng LINQ hoặc EF – AMH

4

Nếu bạn sử dụng LINQ để thực hiện truy vấn cơ sở dữ liệu của bạn, nó loại bỏ loại rủi ro SQL injection đó cho bạn.

+0

cảm ơn nó hỗ trợ cơ sở dữ liệu ROM, những gì về tiêm script xin vui lòng – AMH

7

Miễn là bạn sử dụng truy vấn được tham số hóa hoặc ORM như NHibernate hoặc Entity Framework, bạn không phải làm bất cứ điều gì để ngăn chặn SQL injection. Các tham số được truyền cho máy chủ bên ngoài câu lệnh SQL thực tế, như một phần của cuộc gọi RPC tới máy chủ. Hầu hết các ORM sử dụng các truy vấn được tham số hóa cho các hiệu suất reasones, do đó chúng không dễ bị tấn công SQL injection.

Tiêm SQL chỉ có thể thực hiện được nếu bạn tạo câu lệnh SQL bằng cách ghép nối các giá trị chuỗi.

Điều đó nói rằng, bạn vẫn phải cảnh giác với đầu vào của người dùng để ngăn chặn các cuộc tấn công bằng tập lệnh. May mắn thay, ASP.NET MVC đã cung cấp một cơ chế xác nhận yêu cầu (xem Understanding Request Validation).

+0

nhưng tôi mệt mỏi để thả cơ sở dữ liệu tôi biết bằng cách chuyển các giá trị theo tham số – AMH

+0

Không có vấn đề gì bạn vượt qua tham số (và theo tham số I meand một đối tượng DbParameter-derived như SqlParameter (http://msdn.microsoft.com/en-us/library/system.data.common.dbparameter.aspx), nó sẽ được chuyển đến máy chủ dưới dạng một chuỗi đơn giản. Nó không bao giờ được thực hiện. Bạn vẫn có thể gặp rắc rối nếu bạn sử dụng giá trị được lưu trữ để xây dựng một câu lệnh SQL bằng cách nối chuỗi trong một số phần khác của ứng dụng của bạn. –