Maison >développement back-end >Golang >Comment faire correspondre en toute sécurité les chaînes échappées à l'aide de LIKE dans PostgreSQL ?

Comment faire correspondre en toute sécurité les chaînes échappées à l'aide de LIKE dans PostgreSQL ?

DDD
DDDoriginal
2024-11-19 07:50:02748parcourir

How to Safely Match Escaped Strings Using LIKE in PostgreSQL?

Correspondance des chaînes échappées dans PostgreSQL

Dans PostgreSQL, l'utilisation de l'opérateur LIKE pour faire correspondre des modèles peut devenir problématique lorsqu'il s'agit de caractères spéciaux tels que '_ ' et '%'. Ces caractères peuvent correspondre à des caractères génériques, conduisant à des résultats inattendus. Pour garantir une correspondance littérale, il est essentiel de les échapper correctement.

Le caractère d'échappement utilisé pour LIKE est généralement la barre oblique inverse (), qui doit être répétée deux fois pour représenter un seul caractère d'échappement dans le modèle. Par exemple, « rob_ » échapperait au caractère « _ », lui permettant de correspondre uniquement aux chaînes commençant littéralement par « rob_ ». Cependant, dans PostgreSQL 9.1, le caractère d'échappement par défaut peut changer en fonction du paramètre standard_conforming_strings.

Pour éviter des problèmes potentiels, il est recommandé d'utiliser la fonction REPLACE pour remplacer les caractères spéciaux par leurs équivalents d'échappement côté serveur. Cette approche est plus sûre que la gestion de l'échappement côté client, car elle élimine le besoin de validation supplémentaire des entrées utilisateur.

Par exemple, la requête suivante remplacerait toutes les instances de « _ » et « % » par leurs homologues échappés, puis effectuez la comparaison LIKE, en vous assurant que le modèle correspond littéralement :

SELECT * FROM users WHERE name LIKE replace(replace(replace(,'^','^^'),'%','^%'),'_','^_') ||'%' ESCAPE '^'

En utilisant des remplacements côté serveur, vous pouvez garantir des correspondance de modèles sans ambiguïté tout en évitant les vulnérabilités de sécurité potentielles.

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