mysql_real_escape_string() et mysql_escape_string() sont-ils adéquats pour la sécurité des applications ?
Malgré la prédominance de ces fonctions de désinfection entrée de l'utilisateur, des inquiétudes persistent concernant leurs limites en matière de protection contre les attaques SQL et les exploits potentiels.
Les injections SQL restent une menace :
mysql_real_escape_string() est principalement destiné à empêcher les Injection SQL. Cependant, il offre une protection limitée contre les techniques d'injection avancées.
Considérez ce code :
$sql = "SELECT * FROM users WHERE username = '" . mysql_real_escape_string($username) . "'";
Un attaquant pourrait toujours exécuter une injection en exploitant les noms de table ou de colonne, comme dans :
$username = "'); DROP TABLE users; --";
Attaques LIKE SQL :
Les injections LIKE SQL sont également vulnérables à cela fonction. Par exemple, un attaquant pourrait :
$data = '%'; $sql = "SELECT * FROM users WHERE username LIKE '" . mysql_real_escape_string($data) . "%'"; # Can retrieve all results
Exploits des jeux de caractères Unicode :
Les exploits des jeux de caractères peuvent accorder aux attaquants un contrôle étendu, malgré une configuration HTML correcte.
Exploits de champ LIMIT :
Échapper au champ LIMIT peut permettent également aux attaquants de récupérer des données non autorisées :
$sql = "SELECT * FROM users LIMIT '" . mysql_real_escape_string($limit) . "'"; # Can retrieve all results
Les déclarations préparées comme alternative robuste :
La solution idéale pour la sécurité des bases de données est l'utilisation d'instructions préparées. Les instructions préparées exécutent des requêtes SQL côté serveur, empêchant ainsi l'exécution de SQL inattendu. Prenons cet exemple :
$statement = $pdo->prepare("SELECT * FROM users WHERE username = ?"); $statement->execute(array($username));
En utilisant des instructions préparées, vous exploitez les mécanismes de protection du serveur SQL et êtes protégé contre les exploits connus et inconnus.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!