PHP Cordes échappant


Exemple

Échapper aux chaînes est une méthode plus ancienne ( et moins sécurisée ) de sécurisation des données à insérer dans une requête. Cela fonctionne en utilisant la fonction mysql_real_escape_string () de MySQL pour traiter et assainir les données (en d'autres termes, PHP ne fait pas de fuite). L'API MySQLi fournit un accès direct à cette fonction

$escaped = $conn->real_escape_string($_GET['var']);
// OR
$escaped = mysqli_real_escape_string($conn, $_GET['var']);

A ce stade, vous avez une chaîne que MySQL considère comme sûre pour une utilisation dans une requête directe.

$sql = 'SELECT * FROM users WHERE username = "' . $escaped . '"';
$result = $conn->query($sql);

Alors, pourquoi n'est-ce pas aussi sûr que les déclarations préparées ? Il existe des moyens de piéger MySQL pour produire une chaîne considérée comme sûre. Considérons l'exemple suivant

$id = mysqli_real_escape_string("1 OR 1=1");    
$sql = 'SELECT * FROM table WHERE id = ' . $id;

1 OR 1=1 ne représente pas les données que MySQL échappera, mais cela représente toujours l’injection SQL. Il existe également d' autres exemples qui représentent des endroits où des données non sécurisées sont renvoyées. Le problème est que la fonction d'échappement de MySQL est conçue pour que les données soient conformes à la syntaxe SQL . Il n'est PAS conçu pour garantir que MySQL ne puisse pas confondre les données utilisateur avec les instructions SQL .