Trước hết, điều này được gọi là SQL-Injection . Về cơ bản, nó chỉ là khả năng thay đổi các truy vấn đối với cơ sở dữ liệu thông qua đầu vào của người dùng.
Hãy xem một ví dụ:
Truy vấn:
SELECT temp1 FROM temp WHERE temp2 = 'VAR1';
Bây giờ chúng ta sẽ gán VAR1 giá trị của:'; DROP TABLE *; --
Và chúng tôi sẽ nhận được:
SELECT temp1 FROM temp WHERE temp2 = ''; DROP TABLE *; --';
Với mysql_real_escape_string
nó sẽ trông như thế này:
SELECT temp1 FROM temp WHERE temp2 = '\'; DROP TABLE *; --'
mysql_real_escape_string
'bảo mật' một chuỗi để sử dụng trong một truy vấn.
Nhưng cuối cùng, bạn nên ngừng sử dụng mysql_*
hoàn toàn . Chúng không được chấp nhận và được coi là không an toàn khi nói đến việc ngăn chặn việc đưa vào SQL hoặc các phương tiện xử lý khác với các truy vấn.
Bạn chỉ nên ngừng kết hợp các truy vấn với nhau như thế này và bắt đầu sử dụng báo cáo đã chuẩn bị sẵn , không chỉ dễ sử dụng hơn, ngăn SQL Injection theo mặc định mà còn có thể cải thiện tốc độ ứng dụng của bạn.
Đối với PHP, có hai phần mở rộng được thiết kế để đóng toàn bộ mysql_*
đã mở:
Và tôi nói lại lần nữa: Vui lòng ngừng sử dụng mysql_*
!