Utilisez un problème d'encodage de caractères pour contourner l'injection SQL de mysql_real_escape_string ()
Bien que la fonction mysql_real_escape_string ()
empêche l'injection SQL, elle peut être contournée dans certains cas.
Considérez le code PHP suivant:
$login = mysql_real_escape_string(GetFromPost('login'));
$password = mysql_real_escape_string(GetFromPost('password'));
$sql = "SELECT * FROM table WHERE login='$login' AND password='$password'";
Ce code semble sûr, mais il peut être exploité en raison du cas de bord de codage des jeux de caractères.
Méthode d'attaque:
Les attaques dépendent des étapes suivantes:
mysql_real_escape_string ()
: Le client croit que la connexion utilise un jeu de caractères différent (par exemple, latin1), donc mysql_real_escape_string ()
sera un seul seul Insérez une barre oblique inverse avant les citations, résultant en une chaîne syntaxiquement valide. principe de travail:
Le problème clé est que le jeu de caractères attendu par le serveur ne correspond pas au jeu de caractères considéré par le client. Bien que mysql_real_escape_string ()
soit échappé en fonction du codage de connexion défini par le client, dans certains cas, il traite les caractères multipyte non valides comme un seul octet, y compris l'utilisation de définir des noms
au lieu de MySQL_SET_CHARSET ()
cas.
en conséquence de:
Cette attaque peut contourner l'instruction de prétraitement simulée de PDO, même si l'instruction de prétraitement simulé est désactivée.
Remède:
Utilisez des jeux de caractères non vulnérables, tels que UTF8MB4 ou UTF8, pour atténuer ce problème. Activer NO_BACKSLASH_ESCAPES Le mode SQL offre également une protection.
Exemple sûr:
Définissez toujours le jeu de caractères correctement en utilisant mysql_set_charset ()
ou les paramètres de définition de caractères DSN de PDO. De vraies déclarations de prétraitement dans MySQLI sont également à l'abri de cette attaque.
en conclusion:
Bien que mysql_real_escape_string ()
offre généralement une protection forte, il est important d'être conscient de ces cas de bord potentiels pour assurer une défense complète contre l'injection SQL.
Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.
Copyright© 2022 湘ICP备2022001581号-3