Maison  >  Article  >  développement back-end  >  mysql_real_escape_string() et mysql_escape_string() sont-ils suffisants pour la sécurité des applications ?

mysql_real_escape_string() et mysql_escape_string() sont-ils suffisants pour la sécurité des applications ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-11-02 03:27:03818parcourir

Are mysql_real_escape_string() and mysql_escape_string() Sufficient for App Security?

mysql_real_escape_string() et mysql_escape_string() sont-ils suffisamment sécurisés pour les applications ?

Introduction :

Le maintien de la sécurité des applications est crucial et la sécurité des bases de données joue un rôle important. Bien que mysql_real_escape_string() et mysql_escape_string() soient couramment utilisés pour se protéger contre les injections SQL, des inquiétudes surviennent quant à leur efficacité.

Question :

Est-ce que mysql_real_escape_string() et mysql_escape_string() suffisent pour la sécurité des applications ?

Réponse :

Non.

Vulnérabilités de mysql_real_escape_string() et mysql_escape_string()

Ces fonctions sont insuffisantes pour une sécurité complète des applications en raison de plusieurs failles de sécurité :

Injection SQL :

  • Malgré les revendications de protection, ces fonctions restent vulnérables aux injections SQL, notamment concernant les variables PHP utilisées dans les requêtes.
  • Exemple :

    $sql = "SELECT number FROM PhoneNumbers WHERE " . mysql_real_escape_string($field) . " = " . mysql_real_escape_string($value);  

    Cette requête peut être exploité en insérant des données malveillantes, conduisant potentiellement à un accès non autorisé à la base de données.

Attaques LIKE SQL :

  • Les requêtes LIKE peuvent être compromises en utilisant des caractères spéciaux, tels que "%" ou "_", pour contourner les critères de recherche prévus.
  • Exemple :

    $sql = "SELECT url FROM GrabbedURLs WHERE " . mysql_real_escape_string($field) . " LIKE '%s%%' LIMIT %s";  

    Cette requête permet à un attaquant de récupérer tous les enregistrements, posant des risques de sécurité.

Exploits de jeu de caractères :

  • Internet Explorer reste vulnérable aux exploits de jeu de caractères, permettant aux pirates d'injecter des commandes SQL arbitraires, y compris les injections SQL.

Solution recommandée : déclarations préparées

Pour remédier à ces vulnérabilités, la mesure de sécurité recommandée consiste à utiliser des déclarations préparées.

  • Les instructions préparées utilisent les mécanismes de sécurité inhérents au serveur de base de données.
  • Elles empêchent les injections SQL en exécutant uniquement le SQL prévu.
  • Les instructions préparées simplifient également le code et minimisent les vulnérabilités.

Exemple :

$pdo = new PDO($dsn);

$column = 'url';
$value = 'http://www.stackoverflow.com/';
$limit = 1;

$statement = $pdo->prepare('SELECT url FROM GrabbedURLs WHERE ' . $column . '=? LIMIT ' . $limit);
$statement->execute(array($value));
while (($data = $statement->fetch())) { }

Conclusion :

mysql_real_escape_string() et mysql_escape_string() offrent une protection limitée contre certains Attaques par injection SQL. Cependant, ils sont insuffisants pour protéger les applications contre diverses autres vulnérabilités. L'approche recommandée consiste à utiliser des instructions préparées pour garantir une sécurité complète des applications.

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