Maison >développement back-end >tutoriel php >`mysqli_real_escape_string` offre-t-il une protection complète contre l'injection SQL ?

`mysqli_real_escape_string` offre-t-il une protection complète contre l'injection SQL ?

Linda Hamilton
Linda Hamiltonoriginal
2024-12-20 03:02:13643parcourir

Does `mysqli_real_escape_string` Offer Complete Protection Against SQL Injection?

"mysqli_real_escape_string" peut-il empêcher complètement l'injection SQL ?

Considérez l'exemple de code suivant :

$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 . "')";

Ce code est-il sécurisé contre l'injection SQL et autres attaques ?

Réponse : Non.

Comme souligné dans les exemples de code fournis, "mysqli_real_escape_string" seul est insuffisant pour garantir la protection contre l'injection SQL . Les attaquants peuvent exploiter les vulnérabilités de sa mise en œuvre pour contourner le filtrage et compromettre l'application.

Solution recommandée :

Le moyen le plus efficace d'empêcher l'injection SQL est d'utiliser déclarations préparées. Les instructions préparées isolent les données des requêtes SQL, garantissant ainsi qu'aucune entrée externe n'interfère avec la structure de la requête. En outre, envisagez de mettre en œuvre une liste blanche stricte pour filtrer les données spécifiquement en fonction de leur objectif prévu. Cette approche minimise le risque d'injection SQL et d'autres vulnérabilités de sécurité.

Exemple de requête sécurisée utilisant des instructions préparées :

$stmt = $db->prepare(
    "SELECT * FROM table 
    WHERE col = ? ORDER BY {$sortby} ASC 
    LIMIT ?, ?"
);
$stmt->execute(['value', $start, $howmany]);
$data = $stmt->fetchAll(PDO::FETCH_ASSOC);

En incorporant ces mesures, vous pouvez améliorez considérablement la sécurité de vos opérations SQL contre les attaques malveillantes.

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!

Déclaration:
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