Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

mysql_real_escape_string không đủ tốt?

Lập luận từ tên phương thức queryAsArray , có vẻ như bạn đang sử dụng DbBase này lớp từ các nhận xét của trang hướng dẫn các hàm MySQL . Nếu vậy, đó là query phương thức xóa ký tự thoát khỏi dấu ngoặc kép đã thoát:

function query($sql, &$records = null){
    $sql = str_replace(array('\\"', "\\'"), array('"', "'"), $sql);
    // …
}

Vậy thì việc ví dụ của bạn hoạt động không phải là một phép lạ (tôi đã đơn giản hóa nó):

$input = "', BAD SQL INJECTION --";

$sql = "SELECT '".mysql_real_escape_string($input)."'";
var_dump($sql);  // string(33) "SELECT '\', BAD SQL INJECTION --'"
//                      everything’s OK ↑

$sql = str_replace(array('\\"', "\\'"), array('"', "'"), $sql);
var_dump($sql);  // string(32) "SELECT '', BAD SQL INJECTION --'"
//                                Oops! ↑


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. đếm số biến Null trên mỗi hàng mysql

  2. Sử dụng danh sách Python trong truy vấn SQL cho tên cột

  3. ORDER BY NULL trong MySQL

  4. MySQL:Làm cách nào để tham gia cùng một bảng nhiều lần?

  5. Toán tử logic MySQL