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
Libérer: 2025-01-25 21:18:11
original
548 Les gens l'ont consulté

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!

source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal