Maison > base de données > tutoriel mysql > `mysqli_real_escape_string()` est-il suffisant pour empêcher les attaques par injection SQL ?

`mysqli_real_escape_string()` est-il suffisant pour empêcher les attaques par injection SQL ?

Susan Sarandon
Libérer: 2024-12-14 07:41:10
original
655 Les gens l'ont consulté

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

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 . "'";
Copier après la connexion

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();
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal