Comprendre les injections SQL via addlashes()
En PHP, addlashes() est souvent comparé à mysql_real_escape_string comme mesure de sécurité contre les injections SQL. Bien que les deux puissent aider à protéger les données, des exemples démontrent que addlashes() peut permettre des exploitations.
Une méthode d'attaque peut se produire consiste à manipuler addlashes() pour incorporer une barre oblique inverse dans un caractère multi-octets. En conséquence, le rôle protecteur de la barre oblique inverse est neutralisé et une requête malveillante peut être construite.
Par exemple, considérons la requête suivante utilisant addlashes() :
$query = "SELECT * FROM users WHERE name = '" . addslashes($_GET['name']) . "'";
Un attaquant pourrait passer ce qui suit comme paramètre "name":
'John Doe' OR 1 = 1 --
Normalement, le guillemet simple serait échappé par addlashes(). Cependant, dans ce cas, l'attaquant s'appuie sur le caractère multi-octets « Ö ». Lorsque "Ö" est codé en UTF-8, il se compose de trois octets : 0xC3, 0xB6 et 0x9C.
Addslashes() interprète l'entrée de l'attaquant comme :
'John Doe' ÖR 1 \= 1 --
Avec le barre oblique inverse placée dans le caractère multi-octets, addlashes() le traite comme une continuation du caractère plutôt que comme un symbole d'échappement. Par conséquent, la requête SQL n'est pas correctement échappée, ce qui permet à l'attaquant de contourner les mesures de sécurité.
Il est crucial de noter que ce type d'attaque ne s'applique qu'aux encodages de caractères où existent des caractères multi-octets se terminant par 0x5c (le caractère barre oblique inverse ). UTF-8, cependant, n'est pas conforme à cela, réduisant ainsi sa vulnérabilité à ce vecteur d'attaque spécifique.
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!