Injection SQL – comment protéger votre CMS

article blog Injection SQL – comment protéger votre CMS

Si vous avez pris peur à cause des annonces récentes de vulnérabilité de WordPress, tenez bon. Vous n’êtes pas seul.

Les attaques par injection SQL sont des choses communes en matière de sécurité, mais sont suffisamment compliquées pour que la majorité des gens ne voient pas où est le risque.

Dans cet article nous vous conduirons a travers les bases : que veux dire « injection SQL », quels risques cela représente, que pouvez-vous faire pour cela ?

SQL et Bases de données

SQL (Structured Query Langage) est le langage de référence des bases de données relationnelles. C’est la voie standardisée à travers le monde pour composer des requêtes et récupérer l’information de bases de données complexes et larges. Les développeurs Oracle, SQL Server, MySQL, Postgres, Sybase, Informix – utilisent le même langage pour récupérer des données de tous ces systèmes.

Les requêtes SQL sont écrites en Anglais comme une syntaxe. Imaginez un magasine publier qui garde la liste de ses abonnes dans une table d’une base de données, filtrée par prénom, nom, adresse, date d’expiration de l’abonnement et probablement beaucoup d’autres données.

Le réseau interne du magazine peut permettre de trouver l’adresse d’un abonné dans la base de données en entrant les informations dans les champs NOM et PRENOM. Nous aurons ainsi la requête suivante :

SELECT adresse, ville, code_postal

FROM abonnes

WHERE prenom = « $PRENOM »

AND nom = « $NOM »

Quand l’utilisateur entre « John » pour le prénom et « Doe » pour le nom, le serveur substitue ces noms dans la commande SQL et retourne toutes les adresses des abonnés qui s’appellent John Doe.

Injection Létale

Il y a un problème très grave avec l’exemple ci-dessus. Un utilisateur attentif remarquera que le contenu des champs NOM et PRENOM ont été colles dans le code SQL lui-même.

Que se passe-t-il si l’utilisateur n’entre pas un nom dans le champ, mais insère un code SQL personnel ? Regarder la commande qu’on obtient si on entre cette ligne dans le champ NOM :

Doe ‘’ OR 1=1

Cela oblige le serveur à traiter cette requête :

SELECT addresse, ville, code_postal

FROM abonnes

WHERE prenom = « John »

AND nom = « Doe » OR 1=1

Cela veut dire que le serveur doit rechercher tous les champs de la base de donnée ou on a le nom « John Doe » ou si l’équation « 1=1 » est vraie – et puisque quoi qu’il arrive c’est vrai, nous aurons comme résultat tous les abonnés de la base.

C’est pour cela que cette sorte d’attaque est appelée Injection SQL : les données entrées par l’utilisateur sont injectées dans le code exécuté par l’ordinateur. Si le serveur n’as pas été attentif à « désinfecter » le champ d’entrée, il peut être inclus dans le code en cours d’exécution sans que l’auteur ne l’y ait ajouté au début, et en contournant la protection.

Voici un exemple plus destructif. La commande SQL « DROP TABLE » qui demande au serveur de la base de données de détruire une table entière de données. En ajoutant un point-virgule (« ; ») dans le code injecter, une personne mal intentionnée peut obliger le serveur a exécuté plusieurs commandes SQL :

SELECT addresse, ville, code_postal

FROM abonnes

WHERE prenom = « John »

AND nom = « Doe » ; DROP TABLE abonnes

Et juste comme ça, le serveur retourne les données de l’abonné John Doe mais en même temps il supprime les données de tous les autres abonnés.

Les attaques par injection SQL offrent à un utilisateur mal intentionné un accès illimité au contenu de la base de données de votre application, quelle que soit le niveau de sécurité appliqué.

Un vandale peut supprimer le contenu de votre base de données et vous laisser faire des restaurations de système. Un voleur peut obtenir des données sensibles de la base de données qu’il souhaite, du numéro de téléphone domicile de l’utilisateur aux informations de leurs cartes de crédit.

Que pouvez-vous faire ?

La mauvaise nouvelle c’est que les attaques par injection SQL sont très fréquentes. La bonne nouvelle c’est qu’elles sont presque toujours faciles à corriger. Sécurisé une application contre une injection SQL consiste à vérifier que chaque requête SQL soit « désinfectée » ; ainsi les données soumises par l’utilisateur ne peuvent pas être exécutés comme un code, et désinfecté les données est un processus fiable et compréhensible.

Articles similaires

Erreur dans le Flux RSS WordPress

Il existe beaucoup de types d’erreurs dans le Flux, qui peuvent apparaître après les modifications qui ont été faites dans les plugins ou dans le thème. Dans cet article vous apprendrez comment decouvrir et corriger les erreurs de flux RSS.