Maison > base de données > tutoriel mysql > `mysql_real_escape_string()` et `mysql_escape_string()` sont-ils suffisants pour prévenir les attaques par injection SQL ?

`mysql_real_escape_string()` et `mysql_escape_string()` sont-ils suffisants pour prévenir les attaques par injection SQL ?

Barbara Streisand
Libérer: 2024-11-29 21:20:15
original
615 Les gens l'ont consulté

Are `mysql_real_escape_string()` and `mysql_escape_string()` Sufficient for Preventing SQL Injection Attacks?

Problèmes de sécurité avec mysql_real_escape_string() et mysql_escape_string()

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

Malgré la prédominance de ces fonctions de désinfection entrée de l'utilisateur, des inquiétudes persistent concernant leurs limites en matière de protection contre les attaques SQL et les exploits potentiels.

Les injections SQL restent une menace :

mysql_real_escape_string() est principalement destiné à empêcher les Injection SQL. Cependant, il offre une protection limitée contre les techniques d'injection avancées.

Considérez ce code :

$sql = "SELECT * FROM users WHERE username = '" . mysql_real_escape_string($username) . "'";
Copier après la connexion

Un attaquant pourrait toujours exécuter une injection en exploitant les noms de table ou de colonne, comme dans :

$username = "'); DROP TABLE users; --";
Copier après la connexion

Attaques LIKE SQL :

Les injections LIKE SQL sont également vulnérables à cela fonction. Par exemple, un attaquant pourrait :

$data = '%';
$sql = "SELECT * FROM users WHERE username LIKE '" . mysql_real_escape_string($data) . "%'"; # Can retrieve all results
Copier après la connexion

Exploits des jeux de caractères Unicode :

Les exploits des jeux de caractères peuvent accorder aux attaquants un contrôle étendu, malgré une configuration HTML correcte.

Exploits de champ LIMIT :

Échapper au champ LIMIT peut permettent également aux attaquants de récupérer des données non autorisées :

$sql = "SELECT * FROM users LIMIT '" . mysql_real_escape_string($limit) . "'"; # Can retrieve all results
Copier après la connexion

Les déclarations préparées comme alternative robuste :

La solution idéale pour la sécurité des bases de données est l'utilisation d'instructions préparées. Les instructions préparées exécutent des requêtes SQL côté serveur, empêchant ainsi l'exécution de SQL inattendu. Prenons cet exemple :

$statement = $pdo->prepare("SELECT * FROM users WHERE username = ?");
$statement->execute(array($username));
Copier après la connexion

En utilisant des instructions préparées, vous exploitez les mécanismes de protection du serveur SQL et êtes protégé contre les exploits connus et inconnus.

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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal