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