sql >> Database >  >> RDS >> Mysql

mysql_real_escape_string niet goed genoeg?

Redeneren vanuit de methodenaam queryAsArray , lijkt het erop dat u deze DbBase gebruikt class uit de opmerkingen van de MySQL-functies-handpagina . Zo ja, dan is het de query methode die het escape-teken tussen de aanhalingstekens met escapetekens verwijdert:

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

Dan is het geen wonder dat je voorbeeld werkt (ik heb het vereenvoudigd):

$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. Heeft string of int de voorkeur voor externe sleutels?

  2. Lijst van alle tijdelijke tabellen in SQLite

  3. SQL Oracle LEFT JOIN en SUBQUERY-fout:ORA-00905:ontbrekend trefwoord

  4. Hoe te bestellen op datum in PostgreSQL of Oracle