Le "mysqli_real_escape_string" de MySQLi est-il suffisant contre les attaques SQL ?
Votre code tente de se protéger contre les injections SQL à l'aide de "mysqli_real_escape_string()". Cependant, comme l'indique uri2x, cette mesure est inadéquate.
Vulnérabilité à l'injection SQL
"mysqli_real_escape_string()" n'échappe que certains caractères, laissant votre requête vulnérable à SQL attaques par injection. Par exemple, le code suivant pourrait toujours être vulnérable :
$email = mysqli_real_escape_string($db_con, $_POST['email']); $query = "SELECT * FROM users WHERE email = '" . $email . "'";
Un attaquant pourrait saisir une adresse e-mail telle que "email'@example.com" pour exploiter la requête, en ajoutant des instructions SQL supplémentaires après l'entrée échappée.
Utilisation d'instructions préparées
Au lieu de "mysqli_real_escape_string()", le Le moyen le plus efficace d'empêcher les injections SQL consiste à utiliser des instructions préparées. Les instructions préparées séparent les données de la chaîne de requête, empêchant ainsi la contamination des données.
$stmt = $db_con->prepare("INSERT INTO users (email, psw) VALUES (?, ?)"); $stmt->bind_param('ss', $email, $psw); $email = mysqli_real_escape_string($db_con, $_POST['email']); $psw = mysqli_real_escape_string($db_con, $_POST['psw']); $stmt->execute();
Liste blanche stricte des caractères
Dans les situations où les instructions préparées ne sont pas réalisables, implémenter un caractère strict la liste blanche peut garantir la sécurité. Cela implique de filtrer les entrées pour garantir qu'elles ne contiennent que des caractères autorisés.
Conclusion
"mysqli_real_escape_string()" seul est insuffisant pour se protéger contre les injections SQL. Les déclarations préparées et la liste blanche stricte offrent des garanties plus solides contre ces attaques.
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!