2010-01-11 13 views
5

Tôi có một số trường văn bản trả lời tự do và tôi không chắc chắn cách quét chúng để ngăn chặn việc tiêm SQL. Bất kỳ ý tưởng?Ngăn chặn SQL injection trên các trường văn bản phản hồi miễn phí trong ASP

+0

Bạn đã tự tìm thấy câu trả lời nếu bạn đã tìm kiếm http://stackoverflow.com/questions/tagged/sqlinjection. –

+1

@Bạn có nghĩa là http://stackoverflow.com/questions/tagged/sql-injection+asp-classic và một trong số đó đã được đánh dấu là trùng lặp. – cregox

Trả lời

16

Tạo một parameterized query thay vì ghép nối đầu vào của người dùng vào truy vấn.

Dưới đây là làm thế nào để làm điều này trong asp cổ điển: http://blog.binarybooyah.com/blog/post/Classic-ASP-data-access-using-parameterized-SQL.aspx

Nó cũng quan trọng cần lưu ý rằng cách duy nhất bạn có thể an toàn 100% từ sql injection là để parameterize bất kỳ câu lệnh SQL có sử dụng đầu vào người sử dụng, thậm chí một khi nó nằm trong cơ sở dữ liệu. Ví dụ: Giả sử bạn nhập dữ liệu người dùng qua truy vấn được tham số hóa hoặc thủ tục được lưu trữ. Bạn sẽ được an toàn trên chèn, tuy nhiên bạn cần phải chắc chắn rằng bất cứ điều gì xuống đường sử dụng đầu vào đó cũng sử dụng một tham số. Trực tiếp nối đầu vào của người dùng là một ý tưởng tồi ở bất cứ đâu, kể cả bên trong db.

+2

Và nếu bạn phải viết ASP cổ điển, hãy làm điều đó trong JScript, đẹp hơn rất nhiều! Và, IIRC, cũng hoạt động tốt hơn. – RedFilter

+2

@OrbMan: Làm thế nào mà ở tất cả có liên quan ?? JScript là đẹp hơn nếu bạn không nhớ cô lập chính mình tuy nhiên phần lớn ASP là trong VBScript. Thành thật mà nói nếu bạn phải sử dụng ASP cổ điển làm điều đó trong VBScript, nó dễ dàng hơn nhiều để tích hợp các ví dụ và sẽ dễ dàng hơn cho các nhà phát triển ASP điển hình khác để đọc. – AnthonyWJones

0

Gọi số storedprocedure.

EDIT: Chỉ cần làm rõ. Xây dựng sql động trong một sp tất nhiên có thể nguy hiểm như khi thực hiện trong ứng dụng, nhưng kết nối người dùng nhập vào một truy vấn sẽ bảo vệ bạn chống lại sql injection, như được mô tả ở đây (oracle-specific discussion, nhưng nguyên tắc áp dụng ở nơi khác):

http://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:23863706595353

Nó không phải là sql năng động mà là vấn đề (tất cả sql là năng động trong Oracle thực - thậm chí sql tĩnh trong pro * c/PLSQL). Đó là "việc xây dựng " của sql này là vấn đề . Nếu người dùng cung cấp cho bạn thông tin đầu vào - , họ phải BOUND vào truy vấn - không được ghép nối. Thứ hai, bạn kết nối đầu vào của người dùng vào SQL của bạn - dường như bạn đã cho họ khả năng chuyển mã của bạn và bạn thực hiện mã đó theo số . Đơn giản và đơn giản.

+3

Đừng tin điều đó. Đó là một huyền thoại mà các thủ tục lưu trữ bảo vệ chống lại các lỗ hổng SQL injection. Bạn chỉ có khả năng xây dựng một truy vấn SQL động không an toàn trong một thủ tục như trong mã ứng dụng. –

+0

Tôi không ủng hộ việc xây dựng sql động trong một sp, nhưng cung cấp các trường nhập văn bản làm tham số cho một câu lệnh được tham số hóa trong sp. – davek