"Si un ouvrier veut bien faire son travail, il doit d'abord affûter ses outils." - Confucius, "Les Entretiens de Confucius. Lu Linggong"
Page de garde > La programmation > Est-ce que `mysqli_real_escape_string ()` est-il suffisant pour empêcher les attaques d'injection SQL?

Est-ce que `mysqli_real_escape_string ()` est-il suffisant pour empêcher les attaques d'injection SQL?

Publié le 2025-02-11
Parcourir:833

Is `mysqli_real_escape_string()` Enough to Prevent SQL Injection Attacks?

est "MySQLI" MySqli_Real_escape_String "suffisant contre les attaques SQL?

Votre code tente de protéger contre les injections SQL en utilisant" mysqli_real_escape_string () ". Cependant, comme indiqué par uri2x, cette mesure est inadéquate. Attaques d'injection. Par exemple, le code suivant pourrait toujours être vulnérable:

$ e-mail = mysqli_real_escape_string ($ db_con, $ _post ['e-mail']); $ query = "select * chez les utilisateurs où email = '". $ e-mail. "'"; Un attaquant peut saisir une adresse e-mail comme "email'@example.com" pour exploiter la requête, ajoutant des instructions SQL supplémentaires après l'entrée échappée.

Utiliser des instructions préparées
$email = mysqli_real_escape_string($db_con, $_POST['email']);
$query = "SELECT * FROM users WHERE email = '" . $email . "'";

au lieu de "mysqli_real_escape_string ()", le moyen le plus efficace d'éviter les injections SQL est d'employer des instructions préparées. Instructions préparées séparent les données de la chaîne de requête, empêchant la contamination des données.

$ stmt = $ db_con-> Préparer ("Insérer dans les utilisateurs (e-mail, PSW) VALEURS (?,?)"); $ 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 ();

Caractère strict WhiteListting

$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();

Conclusion

"mysqli_real_escape_string ()" seul est insuffisant pour protéger contre les injections SQL. Les déclarations préparées et la liste blanche stricte fournissent des garanties plus robustes contre ces attaques.

Dernier tutoriel Plus>

Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.

Copyright© 2022 湘ICP备2022001581号-3