Maison > base de données > tutoriel mysql > Comment puis-je utiliser en toute sécurité le LIKE '%{$var}%' de MySQL avec des instructions préparées ?

Comment puis-je utiliser en toute sécurité le LIKE '%{$var}%' de MySQL avec des instructions préparées ?

Mary-Kate Olsen
Libérer: 2025-01-16 10:52:59
original
883 Les gens l'ont consulté

How Can I Safely Use MySQL's LIKE '%{$var}%' with Prepared Statements?

Protection de votre base de données : utilisation appropriée de LIKE '%{$var}%' dans les instructions préparées

La création de fonctionnalités de recherche dynamique qui répondent aux entrées des utilisateurs nécessite un examen attentif de la sécurité. Un scénario courant consiste à rechercher des noms d'utilisateur contenant une correspondance partielle, à l'aide de l'opérateur LIKE de MySQL. Cependant, l'incorporation directe d'une entrée utilisateur dans une clause LIKE dans une instruction préparée est sujette aux vulnérabilités d'injection SQL.

Les approches incorrectes impliquent souvent de tenter d'incorporer des espaces réservés dans les caractères génériques LIKE, tels que SELECT * FROM users WHERE username LIKE '%{?}%'. Ceci est erroné car la syntaxe de l'espace réservé n'est pas correctement interprétée par le pilote de base de données.

La clé pour sécuriser la mise en œuvre réside dans la construction de l'LIKE expression avant de préparer la déclaration. Cela garantit que les entrées de l'utilisateur sont correctement nettoyées et traitées comme des données et non comme du code exécutable. Voici la bonne méthode :

<code class="language-php">$searchParam = "%" . $yourParam . "%"; // Prepend and append wildcards
$stmt = $mysqli->prepare("SELECT * FROM REGISTRY WHERE name LIKE ?");
$stmt->bind_param("s", $searchParam); // Bind the complete LIKE expression
$stmt->execute();</code>
Copier après la connexion

Dans cet exemple amélioré, les caractères génériques % sont ajoutés au $yourParam fourni par l'utilisateur pour créer le modèle LIKE complet stocké dans $searchParam. Ce modèle complet est ensuite lié à l'espace réservé de l'instruction préparée en utilisant bind_param avec le type de chaîne ("s"). Cela empêche l'injection SQL tout en conservant la fonctionnalité de recherche dynamique. Cette approche garantit à la fois la sécurité et l'efficacité offerte par les relevés préparés.

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