Maison >base de données >tutoriel mysql >Les déclarations préparées ont-elles besoin de « mysql_real_escape_string() » pour la sécurité ?
Question :
Est-il nécessaire d'utiliser la fonction mysql_real_escape_string() lors de l'utilisation de la fonction préparée instructions pour les requêtes de base de données ?
Contexte :
Le code fourni illustre une requête d'instruction préparée à l'aide de la bibliothèque mysqli. Cependant, il utilise actuellement la fonction mysql_real_escape_string() pour nettoyer les entrées de l'utilisateur.
<code class="php">$consulta = $_REQUEST["term"]."%"; ($sql = $db->prepare('select location from location_job where location like ?')); $sql->bind_param('s', $consulta); $sql->execute();</code>
Réponse :
Non, les instructions préparées offrent une protection inhérente contre l'injection SQL et manipulation des données lorsqu’elles sont utilisées correctement. Ils nettoient automatiquement les entrées, rendant mysql_real_escape_string() redondant.
Amélioration :
Bien que la requête utilise correctement les instructions préparées, une modification mineure peut améliorer son efficacité. Au lieu d'utiliser la méthode bind_param(), la méthode execute() peut être utilisée pour transmettre directement des paramètres.
<code class="php">$sql->execute([$consulta]);</code>
Remarque supplémentaire :
Bien que les instructions préparées protègent contre l'injection SQL, ils n'assurent pas la sécurité des données lors de leur sortie sur la page. Pour éviter les attaques potentielles de cross-site scripting (XSS), il est recommandé d'utiliser htmlspecialchars() pour encoder en HTML toutes les données avant de les afficher dans le navigateur.
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!