Maison >base de données >tutoriel mysql >Déclarations préparées et injection SQL : mysql_real_escape_string() est-il toujours nécessaire ?
Utilisation des instructions préparées : mysql_real_escape_string() est-il redondant ?
Dans le domaine des interactions avec les bases de données, garantir l'intégrité des données et prévenir les attaques par injection SQL est primordial. Les instructions préparées sont apparues comme une solution robuste pour sécuriser les requêtes de base de données. Cependant, une question persistante se pose : est-il toujours nécessaire d'employer mysql_real_escape_string() lors de l'utilisation d'instructions préparées ?
Comprendre les instructions préparées
Les instructions préparées améliorent la sécurité des requêtes en séparant les Code SQL à partir de l'entrée fournie par l'utilisateur. En utilisant des espaces réservés (« ? »), les instructions préparées empêchent la corruption de la requête SQL elle-même. Une fois exécuté, l'espace réservé est remplacé par l'entrée fournie, atténuant ainsi le risque d'injection de code malveillant dans la base de données.
La fonction mysql_real_escape_string()
Traditionnellement, mysql_real_escape_string() () a été utilisé pour gérer les caractères d'échappement dans les entrées de chaîne afin d'empêcher l'injection SQL. Il a remplacé les caractères potentiellement malveillants par leurs équivalents échappés. Cependant, avec l'avènement des instructions préparées, cette fonction n'est généralement pas requise.
Optimisation de votre requête
Dans l'exemple de requête fourni :
$consulta = $_REQUEST["term"]."%"; ($sql = $db->prepare('select location from location_job where location like ?')); $sql->bind_param('s', $consulta); $sql->execute(); $sql->bind_result($location); $data = array(); while ($sql->fetch()) { $data[] = array('label' => $location); }
Les instructions préparées comme celle ci-dessus constituent une approche sécurisée et efficace pour exécuter des requêtes SQL. Une optimisation mineure que vous pouvez effectuer consiste à utiliser la capacité de la méthode execute() à accepter un tableau de valeurs comme paramètres :
$sql->execute([$consulta]);
Conclusion
Les instructions préparées fournissent un solution complète pour prévenir les attaques par injection SQL lors de l'interaction avec les bases de données. En exploitant les espaces réservés, ils séparent les entrées utilisateur du code SQL, rendant mysql_real_escape_string() redondant dans la plupart des cas. N'oubliez pas de gérer correctement l'échappement des résultats pour empêcher l'exécution de code malveillant sur votre page Web.
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!