Maison > base de données > tutoriel mysql > `mysqli_real_escape_string` est-il suffisant pour empêcher l'injection SQL ?

`mysqli_real_escape_string` est-il suffisant pour empêcher l'injection SQL ?

Susan Sarandon
Libérer: 2024-12-16 13:15:19
original
487 Les gens l'ont consulté

Is `mysqli_real_escape_string` Enough to Prevent SQL Injection?

mysqli_real_escape_string est-il suffisant pour atténuer les injections et les attaques SQL ?

Malgré son utilisation répandue, mysqli_real_escape_string n'est pas une défense impénétrable contre l'injection SQL. Comme illustré dans l'exemple fourni :

$email = mysqli_real_escape_string($db_con, $_POST['email']);
$psw = mysqli_real_escape_string($db_con, $_POST['psw']);

$query = "INSERT INTO `users` (`email`, `psw`) VALUES ('$email', '$psw')";
Copier après la connexion

Ce code tente de se protéger contre les entrées malveillantes en échappant aux guillemets simples à l'aide de mysqli_real_escape_string. Cependant, cette approche reste vulnérable à l'injection SQL, comme le démontre cette attaque :

myEmail = 'user@example.com' OR 0 = 1
Copier après la connexion

Dans ce cas, l'injection exploite le fait que mysqli_real_escape_string n'échappe qu'aux guillemets simples. En injectant la chaîne myEmail = 'user@example.com' OR 0 = 1 dans le champ email, l'attaquant peut contourner l'authentification et obtenir un accès non autorisé.

Pour empêcher efficacement l'injection SQL, envisagez d'utiliser des instructions préparées ou paramétrées. requêtes. Ces mécanismes séparent rigoureusement les données des instructions, éliminant ainsi la possibilité de contamination des entrées.

Les instructions préparées exécutent des requêtes avec des paramètres fournis par l'utilisateur. Ces valeurs sont insérées en toute sécurité dans la requête sans altérer sa structure. Par exemple :

$stmt = $mysqli->prepare("INSERT INTO `users` (`email`, `psw`) VALUES (?, ?)");
$stmt->bind_param("ss", $email, $psw);
Copier après la connexion

Dans les situations où les déclarations préparées ne sont pas réalisables, mettez en œuvre une liste blanche stricte pour restreindre les entrées autorisées. Cela garantit que seules les valeurs sûres sont traitées.

En conclusion, même si mysqli_real_escape_string offre une certaine protection contre l'injection SQL, elle n'est pas infaillible. Les déclarations préparées ou les requêtes paramétrées ainsi que la liste blanche offrent des mécanismes de défense plus robustes 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