Maison >développement back-end >tutoriel php >« addslashes() » offre-t-il une protection suffisante contre les attaques par injection SQL ?

« addslashes() » offre-t-il une protection suffisante contre les attaques par injection SQL ?

Linda Hamilton
Linda Hamiltonoriginal
2024-12-03 02:30:10416parcourir

Does `addslashes()` Offer Sufficient Protection Against SQL Injection Attacks?

Comprendre les risques d'injection SQL via addlashes()

Dans le domaine de la programmation PHP, la protection contre les injections SQL est un aspect crucial de la sécurité des données . Bien que mysql_real_escape soit reconnu comme une défense fiable, la mesure dans laquelle addlashes() présente un risque pour les injections SQL peut parfois rester floue. Cet article vise à clarifier cela en découvrant des exemples de la manière dont addlashes() peut contribuer à de telles attaques.

Le nœud du dilemme réside dans la possibilité pour addlashes() d'insérer une barre oblique inverse dans des caractères multi-octets. Cela peut perturber la séquence d'échappement prévue, permettant à des caractères malveillants de pénétrer et de manipuler les requêtes de base de données.

Pour illustrer, considérons la charge utile suivante :

username = 'lilac\';-- 

Si elle est soumise à des addlashes() :

username = addslashes('lilac\';--');

Le résultat :

username = 'lilac\'\;--'

Dans ce scénario, la séquence d'évasion prévue est contrecarrée, laissant 'lilac';-- en tant que chaîne valide avec un commentaire de ligne intégré. Ce commentaire pourrait être exploité pour contourner la validation et manipuler la requête.

Il est important de noter que cette attaque repose sur des encodages de caractères spécifiques, en particulier ceux avec des caractères multi-octets se terminant par 0x5c (barre oblique inverse). UTF-8, cependant, est exempté de cette vulnérabilité car ses caractères multi-octets autorisés ne sont pas conformes à ce modèle.

Par conséquent, même si addlashes() peut jouer un rôle dans l'assainissement de base des chaînes, il ne faut pas s'y fier uniquement pour empêcher les injections SQL. L'approche la plus sûre reste mysql_real_escape, qui gère efficacement les caractères multi-octets et offre une protection plus robuste contre de telles 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!

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