Maison > développement back-end > tutoriel php > `addslashes()` en PHP est-il suffisant pour empêcher les attaques par injection SQL ?

`addslashes()` en PHP est-il suffisant pour empêcher les attaques par injection SQL ?

Linda Hamilton
Libérer: 2024-12-01 12:12:13
original
257 Les gens l'ont consulté

Is `addslashes()` in PHP Sufficient to Prevent SQL Injection Attacks?

Vulnérabilité d'injection SQL via addlashes()

En PHP, la fonction addlashes() est utilisée pour échapper aux caractères spéciaux dans une chaîne. Cependant, cette fonction est connue pour être vulnérable aux attaques par injection SQL.

Exemple 1

Considérez l'instruction SQL suivante :

SELECT * FROM users WHERE username = '$username'
Copier après la connexion
Copier après la connexion

Si la variable $username contient un guillemet simple ('), un attaquant peut exploiter cette vulnérabilité en envoyant une valeur telle que as :

admin' OR 1=1
Copier après la connexion

Cela entraînera l'instruction SQL suivante :

SELECT * FROM users WHERE username = 'admin'' OR 1=1'
Copier après la connexion

La fonction addlashes() échappera au guillemet simple, mais elle n'échappera pas au caractère espace. En conséquence, l'instruction SQL sera exécutée comme prévu et l'attaquant pourra accéder au compte administrateur.

Exemple 2

Un autre exemple de une vulnérabilité d'injection SQL via addlashes() implique l'utilisation d'un caractère multi-octets se terminant par 0x5c (barre oblique inverse). Cela peut inciter la fonction addlashes() à créer un caractère multi-octets valide au lieu d'échapper au guillemet simple qui suit.

SELECT * FROM users WHERE username = '$username'
Copier après la connexion
Copier après la connexion

Si la variable $username contient le caractère multi-octets suivant :

"\x5c'"
Copier après la connexion

La fonction addlashes() échappera au caractère barre oblique inverse, mais elle n'échappera pas au caractère guillemet simple. Cela entraînera l'instruction SQL suivante :

SELECT * FROM users WHERE username = "\x5c'\x27"
Copier après la connexion

L'instruction SQL sera exécutée comme prévu et l'attaquant pourra accéder à la base de données.

Conclusion

La fonction addlashes() ne doit pas être utilisée pour empêcher les attaques par injection SQL. Au lieu de cela, les développeurs devraient utiliser une fonction plus sécurisée telle que mysql_real_escape ou PDO::quote.

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