Maison  >  Article  >  développement back-end  >  mysql_real_escape_string() vs addlashes() : quelle fonction d'échappement offre une meilleure protection contre les injections SQL ?

mysql_real_escape_string() vs addlashes() : quelle fonction d'échappement offre une meilleure protection contre les injections SQL ?

Susan Sarandon
Susan Sarandonoriginal
2024-10-21 13:02:02744parcourir

mysql_real_escape_string() vs. addslashes(): Which Escaping Function Provides Better SQL Injection Protection?

Comprendre les différences entre mysql_real_escape_string() et addlashes() pour la protection contre les injections SQL

Dans le développement d'applications Web, il est crucial de prévenir les attaques par injection SQL. Bien que addlashes() soit une fonction couramment utilisée pour échapper des caractères, elle ne suffit pas dans certains scénarios. La fonction mysql_real_escape_string() résout spécifiquement ces limitations, améliorant la protection contre les injections SQL.

Différences d'échappement de caractères

mysql_real_escape_string() échappe une gamme plus large de caractères (x00, n, r, , ', " , et x1a) par rapport à addlashes() qui n'échappe que trois caractères (' et NUL). Cette couverture complète garantit que les caractères qui pourraient potentiellement être exploités pour l'injection SQL sont correctement échappés, minimisant ainsi les vulnérabilités.

Injection SQL). Vulnérabilité avec addlashes()

Malgré l'utilisation de addlashes(), une application Web reste vulnérable à l'injection SQL si elle s'appuie exclusivement sur cette fonction pour l'échappement de caractères. Un scénario dans lequel addlashes() échoue est lorsqu'une entrée malveillante contient des guillemets doubles. ("). Ces guillemets peuvent terminer la chaîne déjà citée, permettant à l'attaquant d'injecter des instructions SQL arbitraires.

Par exemple :

<code class="php">$username = addslashes($_POST['username']);
$sql = "SELECT * FROM users WHERE username='$username'";</code>

Si l'entrée utilisateur est "John' OR 1='1" , addlashes() n'échappera qu'au guillemet simple ('), ce qui donnera l'instruction SQL suivante :

<code class="sql">SELECT * FROM users WHERE username='John\' OR 1=\'1\'</code>

Le guillemet double (") n'est pas échappé, permettant à l'attaquant de terminer la chaîne citée et d'ajouter logique SQL supplémentaire. En conséquence, la requête renverra tous les utilisateurs au lieu de seulement John, compromettant potentiellement les informations sensibles.

Conclusion

Bien que addlashes() fournisse un échappement de caractères de base pour la protection contre les injections SQL, ce n'est pas suffisant pour éliminer complètement les vulnérabilités. mysql_real_escape_string() surmonte cette limitation en échappant à une plus large gamme de caractères, en résolvant les scénarios dans lesquels addlashes() échoue. En utilisant mysql_real_escape_string() ou en adoptant des requêtes paramétrées comme alternative supérieure, les développeurs Web peuvent améliorer considérablement la fonctionnalité. sécurité de leurs applications contre les attaques par injection SQL.

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