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.
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.
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.
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!