Mysql
 sql >> Datenbank >  >> RDS >> Mysql

mysql_real_escape_string nicht gut genug?

Begründung aus dem Methodennamen queryAsArray , es scheint, dass Sie diese DbBase verwenden -Klasse aus den Kommentaren der Handbuchseite zu den MySQL-Funktionen . Wenn ja, ist es die query Methode, die das Escape-Zeichen aus den Escape-Anführungszeichen entfernt:

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

Dann ist es kein Wunder, dass Ihr Beispiel funktioniert (ich habe es vereinfacht):

$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! ↑