Maison >base de données >tutoriel mysql >L'injection SQL peut-elle encore se produire même avec `mysql_real_escape_string ()`?

L'injection SQL peut-elle encore se produire même avec `mysql_real_escape_string ()`?

DDD
DDDoriginal
2025-01-25 21:18:11545parcourir

Can SQL Injection Still Occur Even with `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:

    Sélection du jeu de caractères:
  1. 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.

    Construction de charge efficace:
  2. 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 () Opération:
  3. 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.

    • Exécution de la requête:
  4. La requête de rendu contient un skimmer non préparé dans le contenu de la justice, ce qui conduit à une attaque d'injection réussie.

      PDO et MySqli Vulnérabilités:
  5. L'utilisation par défaut de PDO des instructions de pré-procédé analogique, qui est facilement attaqué.

MySQLI n'est pas affecté car il utilise une véritable instruction de pré-procédure.

Soulagez les mesures:
  • Utiliser des jeux de caractères non-attaquant pour connecter le codage (par exemple, UTF8).
Utilisez mysql_set_charset () / PDO Les paramètres de définition de caractères DSN définissent correctement le jeu de caractères de connexion.

Désactiver les instructions de pré-procédure de simulation dans l'OPD.

    Les conditions suivantes sont vérifiées:
  • Version MySQL moderne avec la gestion du jeu de caractères correct
  • ou utilisez des jeux de caractères non vulnérables

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!

Déclaration:
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