Maison >base de données >tutoriel mysql >L'injection SQL peut-elle encore se produire même avec `mysql_real_escape_string ()`?
Même si vous utilisez mysql_real_escape_string (), l'injection SQL peut encore se produire
Bien que l'on croit généralement que MySQL_REAL_ESCAPE_STRING () peut empêcher l'injection de SQL, dans des cas spécifiques, l'injection SQL peut encore se produire. Ce qui suit explique comment cette attaque s'est produite:
Définissez le jeu de caractères du serveur pour permettre la pente ASCII Back (0x5c) et le jeu de caractères multi-lignes non valide (par exemple, GBK). Cela peut être implémenté via l'instruction SET NOMS.
Créez une charge efficace à partir de 0xbf27. Dans le jeu de caractères spécifié (par exemple, GBK), cela signifie un caractère multi-ligne non valide qui sera converti en 0x27 (ship) dans Latin1.
mysql_real_escape_string () Basé sur des opérations de caractères connectés (GBK), plutôt que sur le jeu de caractères truqué client (Latin1). Il sera efficace d'être valide à 0x5c27. Cependant, comme le client estime toujours qu'il utilise Latin1, l'arrière-plan (0x5c) n'est toujours pas rentable.
MySQLI n'est pas affecté car il utilise une véritable instruction de pré-procédure.
Soulagez les mesures:Désactiver les instructions de pré-procédure de simulation dans l'OPD.
Vous pouvez réduire cette lacune potentielle.
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!