Maison > développement back-end > tutoriel php > 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 ?

Mary-Kate Olsen
Libérer: 2024-11-03 10:58:03
original
625 Les gens l'ont consulté

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 à résoudre certaines vulnérabilités.

Injection SQL

Mysql_real_escape_string() peut toujours exposer votre application à une 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);  
Copier après la connexion

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 Like

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 d'exécuter des commandes SQL arbitraires.

Déclarations préparées : une solution complète

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())) { }
Copier après la connexion

Les instructions préparées offrent un mécanisme de défense proactif en en tirant parti des 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.

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