Attaques par injection PHP et SQL [2]
Citations magiques
Comme mentionné ci-dessus, l'injection SQL soumet principalement des données dangereuses à la base de données pour atteindre l'objectif de l'attaque. Afin d'empêcher les attaques par injection SQL, PHP est livré avec une fonction capable de traiter la chaîne d'entrée et d'effectuer un traitement de sécurité préliminaire sur l'entrée au niveau inférieur, c'est-à-dire Magic Quotes. (php.ini magic_quotes_gpc). si magic_quotes_gpc
Si l'option est activée, les guillemets simples, doubles et autres caractères de la chaîne d'entrée seront automatiquement précédés d'une barre oblique inverse .
Mais Magic Quotes n'est pas une solution très universelle, elle ne bloque pas tous les personnages potentiellement dangereux, et sur de nombreux serveurs, Magic Quotes n'est pas activé. Par conséquent, nous devons également utiliser diverses autres méthodes pour empêcher l’injection SQL.
De nombreuses bases de données fournissent nativement cette fonctionnalité de traitement des données d’entrée. Par exemple, la fonction d'opération MySQL de PHP a une fonction appelée mysql_real_escape_string(), qui peut échapper aux caractères spéciaux et aux caractères susceptibles de provoquer des erreurs de fonctionnement de la base de données.
se référer à :
http://cn2.php.net/mysql_real_escape_string
Si vous êtes intéressé, vous pouvez lire les commentaires ci-dessous :)
Regardez ce code :
//Si la fonction Magic Quotes est activée
si (get_magic_quotes_gpc()) {
$name = bandes obliques ($name);
}autre{
$nom = mysql_real_escape_string($nom);
}
mysql_query("SELECT * FROM users WHERE name='{$name}'");
Notez qu'avant d'utiliser les fonctions fournies par la base de données, nous devons déterminer si Magic Quotes est activé, comme dans l'exemple ci-dessus, sinon il sera répété deux fois. Le traitement se déroulera mal. Si MQ est activé, nous devons supprimer le ajouté pour obtenir les données réelles.
En plus du prétraitement des données sous forme de chaîne ci-dessus, lors du stockage de données binaires dans la base de données, vous devez également faire attention au prétraitement. Dans le cas contraire, les données pourraient entrer en conflit avec le format de stockage de la base de données elle-même, provoquant un crash de la base de données, la perte d'enregistrements de données, voire la perte de la totalité de la base de données. Certaines bases de données, telles que PostgreSQL, fournissent une fonction pg_escape_bytea() spécialement utilisée pour coder des données binaires, qui peut coder les données de manière similaire à Base64.
comme:
// pour l'utilisation de données en texte brut :
pg_escape_string($regular_strings);
// pour l'utilisation de données binaires :
pg_escape_bytea($binary_data);
Dans un autre cas, nous devons également utiliser un tel mécanisme. C'est-à-dire des langues multi-octets telles que le chinois, le japonais, etc. qui ne sont pas prises en charge par le système de base de données lui-même. Certains d'entre eux ont des plages ASCII qui chevauchent des plages de données binaires.
Cependant, l'encodage des données peut entraîner l'échec de requêtes telles que LIKE abc%.