Từ nghiên cứu sâu hơn, tôi đã tìm thấy:
http://dev.mysql.com/doc/refman/5.1/en/news-5-1-11.html
Khắc phục bảo mật:
Một lỗ hổng bảo mật SQL-injection đã được tìm thấy trong quá trình xử lý mã hóa nhiều byte. Lỗi nằm trong máy chủ, phân tích cú pháp sai chuỗi được thoát bằng hàm API mysql_real_escape_string () C API.
Lỗ hổng này được phát hiện và báo cáo bởi Josh Berkus và Tom Lane như một phần của sự hợp tác bảo mật liên dự án của tập đoàn OSDB. Để biết thêm thông tin về SQL injection, vui lòng xem văn bản sau.
Thảo luận. Một lỗ hổng bảo mật của SQL injection đã được tìm thấy trong quá trình xử lý mã hóa nhiều byte. Lỗ hổng bảo mật chèn SQL có thể bao gồm một tình huống trong đó khi người dùng cung cấp dữ liệu để chèn vào cơ sở dữ liệu, người dùng có thể đưa câu lệnh SQL vào dữ liệu mà máy chủ sẽ thực thi. Liên quan đến lỗ hổng này, khi sử dụng tính năng thoát không nhận biết bộ ký tự (ví dụ: addlash () trong PHP), có thể bỏ qua việc thoát trong một số bộ ký tự nhiều byte (ví dụ: SJIS, BIG5 và GBK). Do đó, một hàm như addlash () không thể ngăn chặn các cuộc tấn công SQL-injection. Không thể sửa lỗi này ở phía máy chủ. Giải pháp tốt nhất là các ứng dụng sử dụng tính năng thoát nhận biết bộ ký tự được cung cấp bởi một hàm như mysql_real_escape_string ().
Tuy nhiên, một lỗi đã được phát hiện trong cách máy chủ MySQL phân tích cú pháp đầu ra của mysql_real_escape_string (). Kết quả là, ngay cả khi hàm nhận biết bộ ký tự mysql_real_escape_string () được sử dụng, vẫn có thể đưa vào SQL. Lỗi này đã được cố định.
Cách giải quyết. Nếu bạn không thể nâng cấp MySQL lên phiên bản bao gồm bản sửa lỗi trong phân tích cú pháp mysql_real_escape_string (), nhưng chạy MySQL 5.0.1 trở lên, bạn có thể sử dụng chế độ SQL NO_BACKSLASH_ESCAPES như một giải pháp thay thế. (Chế độ này đã được giới thiệu trong MySQL 5.0.1.) NO_BACKSLASH_ESCAPES cho phép chế độ tương thích chuẩn SQL, trong đó dấu gạch chéo ngược không được coi là một ký tự đặc biệt. Kết quả là các truy vấn sẽ không thành công.
Để đặt chế độ này cho kết nối hiện tại, hãy nhập câu lệnh SQL sau:
SET sql_mode='NO_BACKSLASH_ESCAPES';
Bạn cũng có thể đặt chế độ trên toàn cầu cho tất cả các máy khách:
SET GLOBAL sql_mode='NO_BACKSLASH_ESCAPES';
Chế độ SQL này cũng có thể được bật tự động khi máy chủ khởi động bằng cách sử dụng tùy chọn dòng lệnh --sql-mode = NO_BACKSLASH_ESCAPES hoặc bằng cách đặt sql-mode = NO_BACKSLASH_ESCAPES trong tệp tùy chọn máy chủ (ví dụ: my.cnf hoặc my.ini , tùy thuộc vào hệ thống của bạn). (Lỗi # 8378, CVE-2006-2753)
Xem thêm Lỗi # 8303.