2010-11-13 39 views
7

Trong PHP Manual, có một lưu ý:Có phải mysql_real_escape_string đủ để chống SQL Injection không?

Lưu ý: Nếu chức năng này không được sử dụng để dữ liệu thoát, truy vấn là dễ bị tổn thương để tấn công SQL Injection.

Điều này có đủ để chống tiêm sql không? Nếu không, bạn có thể đưa ra một ví dụ và một giải pháp tốt để chống tiêm sql?

+1

Xem [Liệu mysql_real_escape_string() HOÀN TOÀN có bảo vệ chống lại SQL injection không? ] (http://stackoverflow.com/questions/1220182/does-mysql-real-escape-string-fully-protect-against-sql-injection). –

+0

chắc chắn là một bản sao ở trên – mikeycgto

Trả lời

6

mysql_real_escape_string thường đủ để tránh chèn SQL. Điều này phụ thuộc vào nó là lỗi miễn phí mặc dù, tức là có một số cơ hội chưa biết nhỏ nó dễ bị tổn thương (nhưng điều này chưa được thể hiện trong thế giới thực). Một lựa chọn tốt hơn mà hoàn toàn loại trừ việc tiêm SQL trên một mức khái niệm là prepared statements. Cả hai phương pháp hoàn toàn phụ thuộc vào việc áp dụng chúng một cách chính xác; tức là sẽ không bảo vệ bạn nếu bạn chỉ đơn giản là làm hỏng nó.

+1

chỉ để làm rõ: đó cũng là cơ hội mà PDO mô phỏng các truy vấn đã chuẩn bị (cho mysql) và không sử dụng các mysql gốc. Không có tuyên bố như vậy trong tài liệu php (hoặc tôi không thể tìm thấy một). – zerkms

+0

"PDO sẽ mô phỏng cho các trình điều khiển không hỗ trợ chúng" --- là không đủ, bởi vì: a) libmysql được cài đặt (cũ) không thể hỗ trợ chuẩn bị; b) PDO vẫn không thể sử dụng các câu lệnh chuẩn bị sẵn có. – zerkms

0

Theo tôi biết đây là một cách chắc chắn để tránh các cuộc tấn công SQL Injection.

+0

Xin lỗi quên để thêm, rằng tôi nghĩ rằng bạn có thể tấn công từ một URL. – mcbeav

+0

Bạn cũng có thể, luôn hạn chế ai có thể truy cập vào những gì trên cơ sở dữ liệu của bạn, và ai có đặc quyền gì. – mcbeav

0

Giải pháp tốt nhất là PDO.

Nếu bạn đang sử dụng số mysql_query truyền thống thì chạy tất cả dữ liệu của mình qua mysql_real_escape_string() là đủ.

+0

Truy vấn được tham số là gì? – Jichao

+0

Các truy vấn tham số cũng có sẵn trong phần mở rộng 'PDO' – stillstanding

Các vấn đề liên quan