L'intention de l'injection MySQL est de s'emparer de la base de données du site Web et de voler des informations. Les bases de données open source courantes, telles que MySQL, ont été utilisées par de nombreux développeurs de sites Web pour stocker des informations importantes telles que des mots de passe, des informations personnelles et des informations administratives.
MySQL est populaire car il est utilisé avec le langage de script côté serveur le plus populaire, PHP. De plus, PHP est le langage principal du serveur Linux-Apache qui domine Internet. Cela signifie donc que les pirates peuvent facilement exploiter PHP, tout comme les logiciels espions Windows.
Les pirates saisissent de grandes quantités de code malveillant dans un formulaire Web non sécurisé (via des menus déroulants, des champs de recherche, des formulaires de contact, des formulaires de requête et des cases à cocher).
Le code malveillant sera envoyé dans la base de données MySQL puis « injecté ». Pour visualiser ce processus, considérons d'abord l'instruction de requête MySQL SELECT de base suivante :
SELECT * FROM xmen WHERE username = 'wolverine'
Cette requête demandera à la base de données avec la table "xmen" de renvoyer une certaine donnée avec le nom d'utilisateur "wolverine". dans MySQL.
Dans le formulaire Web, l'utilisateur saisira Wolverine et ces données seront transmises à la requête MySQL.
Si l'entrée n'est pas valide, il existe d'autres moyens pour les pirates de prendre le contrôle de la base de données, par exemple en définissant le nom d'utilisateur :
' OR ''=''
Vous pourriez penser qu'il est prudent d'utiliser la syntaxe PHP et MySQL normale pour effectuer l'entrée, car chaque fois que quelqu'un entre un code malveillant, il le fera. Vous recevrez un message « requête invalide », mais ce n'est pas le cas. Les pirates sont intelligents et toute faille de sécurité n’est pas facile à corriger car elle implique le nettoyage de la base de données et la réinitialisation des privilèges administratifs.
Deux malentendus courants concernant les attaques par injection MySQL sont les suivants :
1. Les administrateurs réseau pensent que les injections malveillantes peuvent être nettoyées avec un logiciel antivirus ou un logiciel anti-spyware. Le fait est que ce type d’infection exploite les faiblesses de la base de données MySQL. Il ne peut pas être simplement supprimé par un programme anti-spyware ou antivirus.
2. L'injection MySQL se produit en raison de la copie d'un fichier infecté à partir d'un autre serveur ou d'une source externe. Ce n'est pas le cas. Ce type d'infection se produit lorsqu'une personne saisit un code malveillant dans un formulaire non protégé sur un site Web, puis accède à la base de données. L'injection MySQL peut être nettoyée en supprimant le script malveillant, plutôt qu'en utilisant un programme antivirus.
Le processus de validation des entrées utilisateur
sauvegarde une base de données propre et la supprime du serveur. Exportez un ensemble de tables MySQL et enregistrez-les sur le bureau.
Accédez ensuite au serveur et désactivez d’abord temporairement la saisie du formulaire. Cela signifie que le formulaire ne peut pas traiter les données et que le site Web est fermé.
Ensuite, démarrez le processus de nettoyage. Tout d’abord, sur votre serveur, nettoyez toutes les injections MySQL salissantes restantes. Modifiez tous les mots de passe de la base de données, du FTP et du site Web.
Dans le pire des cas, si vous effectuez le nettoyage en retard, vous pouvez vérifier s'il existe des programmes cachés en cours d'exécution sur votre serveur. Ces programmes cachés sont des chevaux de Troie installés par des pirates. Supprimez-le complètement et modifiez toutes les autorisations FTP. Analysez le serveur à la recherche de tous les chevaux de Troie et logiciels malveillants.
Lorsque vous modifiez le programme de script PHP, les données du formulaire seront traitées. Un bon moyen d'empêcher l'injection de MySQL est de ne même pas faire confiance aux données utilisateur. La validation des entrées utilisateur est très importante pour empêcher l'injection MySQL.
Pour concevoir un filtre permettant de filtrer les entrées de l'utilisateur, voici quelques conseils :
1. Les entrées du formulaire sont des nombres. Vous pouvez vérifier qu'il s'agit d'un nombre en testant qu'il est égal ou supérieur à 0,001 (en supposant que vous n'acceptez pas de zéro).
2. S'il s'agit d'une adresse e-mail. Vérifiez s'il s'agit de combinaisons de caractères autorisées, telles que "@", AZ, az ou certains chiffres.
3. S’il s’agit du nom d’une personne ou d’un nom d’utilisateur. Il peut être vérifié s'il contient des caractères illégaux, tels que et et *, qui sont des caractères malveillants pouvant être utilisés pour l'injection SQL.
Validation de la saisie numérique
Le script suivant vérifie qu'un nombre valide compris entre 0,001 et l'infini est saisi. Il convient de mentionner que dans un programme PHP, vous pouvez même autoriser l'utilisation de nombres dans une certaine plage. Utilisez ce script de validation pour vous assurer que seul un numéro est saisi dans le formulaire.
Supposons que vous ayez trois variables numériques dans votre programme ; vous devez les valider, nommons-les num1, num2 et num3 :
//Valider la saisie numérique
if($_POST['num1'] >= 0,001 && $_POST['num2'] >= 0,001 && $_POST['num3'] >= 0,001){
}else{
}
?>
Et la condition peut être étendue pour accueillir plus de trois numéros. Donc, si vous en avez 10, il vous suffira de développer l’instruction AND.
Cela peut être utilisé pour valider un formulaire qui n'accepte que des chiffres, tels que les quantités contractuelles, les numéros de licence, les numéros de téléphone, etc.
Valider les saisies de texte et d'adresse e-mail
Les éléments suivants peuvent être utilisés pour valider les saisies de formulaire telles que les noms d'utilisateur, les prénoms et les adresses e-mail :
// Valider la saisie de texte
if (! preg_match('/^[-az.-@,'s]*$/i',$_POST['name'])){
}
elseif ($empty==0){
}else{
}
?>
L'un des avantages de ce script de validation est qu'il n'accepte pas les entrées vides. Certains utilisateurs malveillants manipulent également des bases de données via des entrées vides. À l'aide du script ci-dessus, validez une seule variable littérale, "$name". Cela signifie que si vous disposez de trois variables de texte, vous pouvez configurer un script de validation pour chaque variable afin de garantir que chaque variable réussit l'examen avant d'entrer dans la base de données.