Maison >développement back-end >tutoriel php >`addslashes()` en PHP est-il suffisant pour empêcher les attaques par injection SQL ?
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'
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
Cela entraînera l'instruction SQL suivante :
SELECT * FROM users WHERE username = 'admin'' OR 1=1'
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'
Si la variable $username contient le caractère multi-octets suivant :
"\x5c'"
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"
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!