"Si un ouvrier veut bien faire son travail, il doit d'abord affûter ses outils." - Confucius, "Les Entretiens de Confucius. Lu Linggong"
Page de garde > La programmation > L'utilisation de `mysql_real_escape_string()` et `mysql_escape_string()` est-elle suffisante pour sécuriser votre application ?

L'utilisation de `mysql_real_escape_string()` et `mysql_escape_string()` est-elle suffisante pour sécuriser votre application ?

Publié le 2024-12-22
Parcourir:395

Is Using `mysql_real_escape_string()` and `mysql_escape_string()` Enough to Secure Your Application?

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

Bien que ces fonctions puissent fournir une certaine protection contre l'injection SQL et d'autres attaques , ils ne parviennent pas à corriger certaines vulnérabilités.

SQL L'injection

Mysql_real_escape_string() peut toujours exposer votre application à l'injection SQL si vous ne gérez pas correctement les variables PHP dans les requêtes. Prenons l'exemple suivant :

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

Cette requête peut être manipulée par un attaquant pour exécuter des instructions SQL non autorisées, car mysql_real_escape_string() n'est pas conçu pour sécuriser les noms de tables, les noms de colonnes ou les champs LIMIT.

Attaques similaires

Mysql_real_escape_string() est insuffisant pour empêcher les exploits LIKE. Un attaquant pourrait saisir une valeur malveillante telle que « %% » pour renvoyer tous les enregistrements, compromettant potentiellement les informations sensibles.

Exploits de jeu de caractères

Certains navigateurs peuvent être vulnérables au jeu de caractères. exploits, permettant aux attaquants d'injecter des caractères malveillants qui contournent les mécanismes d'échappement et exécutent des commandes SQL arbitraires.

Déclarations préparées : une description complète Solution

Pour sécuriser efficacement votre application, il est recommandé d'utiliser des instructions préparées au lieu de mysql_real_escape_string(). Les instructions préparées exécutent des requêtes SQL avec des valeurs fournies par l'utilisateur en les liant en tant que paramètres. Cela élimine le besoin d'échappement manuel et garantit que seul le SQL autorisé est exécuté.

Voici un exemple d'utilisation d'une instruction préparée en PHP :

$pdo = new PDO($dsn);

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

// Validate the search parameter column.
$validColumns = array('url', 'last_fetched');
if (!in_array($column, $validColumns)) { $column = 'id'; }

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

Les instructions préparées offrent un mécanisme de défense proactif en exploitant les fonctionnalités de sécurité du serveur de base de données sous-jacent. Ils sont intrinsèquement résistants aux attaques connues et inconnues, garantissant ainsi l'intégrité de vos données.

Dernier tutoriel Plus>

Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.

Copyright© 2022 湘ICP备2022001581号-3