Maison > base de données > tutoriel mysql > `mysql_real_escape_string()` et `mysql_escape_string()` sont-ils suffisants pour sécuriser mon application contre l'injection SQL ?

`mysql_real_escape_string()` et `mysql_escape_string()` sont-ils suffisants pour sécuriser mon application contre l'injection SQL ?

Mary-Kate Olsen
Libérer: 2024-12-06 03:34:12
original
256 Les gens l'ont consulté

Are `mysql_real_escape_string()` and `mysql_escape_string()` Enough to Secure My App from SQL Injection?

MySql_real_escape_string() et mysql_escape_string() sont-ils suffisants pour la sécurité des applications ? Évaluation des vulnérabilités potentielles

Malgré leur utilisation courante, mysql_real_escape_string() et mysql_escape_string() peuvent ne pas protéger complètement les bases de données contre les attaques SQL, les laissant vulnérables à divers exploits malveillants.

Attaques par injection SQL

Contrairement à la croyance populaire, mysql_real_escape_string() ne peut pas empêcher les injections SQL dans tous les scénarios. Il échappe efficacement aux données variables mais ne parvient pas à protéger les noms de tables, les noms de colonnes ou les champs LIMIT contre les manipulations malveillantes. Cette limitation peut être exploitée par des attaquants pour créer des requêtes comme celles-ci :

$sql = "SELECT number FROM PhoneNumbers WHERE " . mysql_real_escape_string($field) . " = " . mysql_real_escape_string($value);
Copier après la connexion

Un pirate informatique expérimenté pourrait toujours contourner ces fonctions d'échappement en manipulant le champ ou les variables de valeur pour créer une requête malveillante.

Attaques LIKE SQL

Les attaques LIKE SQL peuvent également contourner les protections mysql_real_escape_string(). Dans le cadre de requêtes impliquant des instructions LIKE "$data%", un attaquant pourrait fournir une chaîne vide comme entrée pour faire correspondre tous les enregistrements, exposant potentiellement des informations sensibles telles que les numéros de carte de crédit.

Exploits de jeu de caractères

Les exploits Charset restent une menace, en particulier dans Internet Explorer. En exploitant les différences de jeux de caractères entre la base de données et le navigateur Web, les attaquants peuvent exécuter des requêtes malveillantes qui prennent le contrôle total du serveur SQL.

LIMIT Exploits

LIMIT exploits permettent attaquants pour manipuler la clause LIMIT d'une requête SQL, en l'utilisant pour joindre plusieurs requêtes et exécuter des commandes non autorisées.

Préparé Les déclarations comme défense robuste

Pour lutter contre ces vulnérabilités et garantir une sécurité efficace des applications, les déclarations préparées apparaissent comme le mécanisme de défense préféré. Les instructions préparées utilisent la validation côté serveur pour exécuter uniquement les instructions SQL autorisées, fournissant ainsi une défense proactive contre les exploits connus et inconnus.

Exemple de code utilisant des instructions préparées

$pdo = new PDO($dsn);

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

$validColumns = array('url', 'last_fetched');

// Validate the $column parameter
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

Conclusion

Alors que mysql_real_escape_string() et mysql_escape_string() fournissent une certaine protection contre les attaques SQL, ils ne sont pas infaillibles. La mise en œuvre d'instructions préparées est une solution plus complète et plus robuste qui protège les applications contre un large éventail de vulnérabilités, garantissant ainsi une meilleure sécurité des applications.

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