Les attaques par injection SQL représentent plus du quart des actes de piratages recensés sur le Web. Découvrez comment se protéger au mieux contre ce type d’attaque.
Qu’est-ce qu’une injection SQL ?
Une injection SQL est une technique de piratage exploitant les failles d’un site internet ou d’une application par le biais de commandes SQL plus ou moins complexes dans le but de voler les données enregistrées dans la base de données ou de prendre totalement la main sur cette base de données.
Il s’agit de la vulnérabilité la plus courante sur le Web.
Un exemple simple d’attaque par injection SQL
Imaginons que vous ayez sur votre site un formulaire de connexion pour vos utilisateurs de cette forme :
La requête SQL basique sans aucune protection pour vérifier les données saisies par l’utilisateur aura cette forme :
Une injection SQL basique consiste à « shunter » les conditions de la requête en injectant une condition toujours vraie dans la requête.
Exemple de saisie permettant l’injection SQL :
Dans cette configuration votre requête sera :
En fonction du traitement qui est fait après cette requête au niveau PHP, cette requête aura pour conséquence de connecter le hacker à l’espace membre voir éventuellement d’afficher au hacker le contenu de la table users, ce qui lui permettra par la suite de se connecter à l’espace membre de votre site avec de vrais paramètres de connexion.
Les bonnes pratiques pour protéger son site d’une attaque par injection SQL
Le mot d’ordre : Vigilance
Soyez très vigilant à tous les niveaux de votre site internet, ne faites jamais confiance aux données saisies par l’utilisateur. Chaque formulaire de connexion, formulaire de recherche, paramètres d’URL (pour la pagination notamment) sont autant de risque d’attaque par injection SQL.
Vérifiez toutes vos variables
Toutes les variables provenant d’une saisie de l’utilisateur ou d’un paramètre d’URL susceptible d’être utilisées dans une requête SQL doivent être vérifiées.
Utilisez des requêtes préparées
Avec PHP notamment il est désormais possible d’utiliser des librairies qui vont « préparer » vos requêtes avant leur exécution. La « préparation » des requêtes consiste notamment à la validation des données et de l’échappement des caractères spéciaux pouvant compromettre la requête.
La plus connue de ces librairies se nomme PDO, mais récemment avec PHP cette fonction est incluse de base dans la nouvelle classe MySQLi.
Masquez les messages d’erreurs
Les messages d’erreurs peuvent donner de précieuses indications aux hackers sur votre base de données notamment : Nom de la base, nom de table etc… Il est important de ne pas rendre ces informations accessibles donc il est conseillé de masquer les messages d’erreurs susceptibles de s’afficher sur votre site. Sur nos hébergements mutualisés vous pouvez gérer cela directement depuis votre espace client dans la configuration PHP en mettant la variable de configuration display_errors à Off (Pour plus d’informations, consultez notre rubrique d’aide).
Au niveau de la base de données
Dans la mesure du possible il ne faut pas que votre site ou application ne se connecte avec les droits root au serveur de base de données, dans le cas contraire un hacker pourrais prendre la main sur l’ensemble du serveur de base de données. Créez donc un utilisateur spécifique pour votre site.
Cryptez les données sensibles de votre base de données telles que les mots de passe utilisateur. Cela ne vous protégera pas directement contre un injection SQL mais cela limitera les dégats en cas d’attaques. Aujourd’hui encore beaucoup d’attaque révèlent des systèmes où les mots de passe sont stockés en clair dans la base de données.
Comment tester la vulnérabilité de votre site ?
Il est important de prendre connaissance des vulnérabilités de votre site avant d’être la cible d’un pirate informatique.
Il existe quelques outils permettant de savoir si votre site internet est vulnérable aux attaques par injection SQL :
- Le site hackertarget.com propose un outil de tests en ligne
- Le logiciel OWASP Zed Attack Proxy Project teste également les vulnérabilités les plus courantes telles que les failles XSS en plus des injections SQL.