Injections SQL et méthodes de protection

De Wiki du LAMA (UMR 5127)
Aller à la navigation Aller à la recherche
Auteurs : Rémi Rebillard et Loïc Robergeon


Les injections SQL (ou SQLi pour SQL Injection) est une une faille de sécurité dans les formulaires. On injecte dans une requète SQL, un morceau de requête qui n'est pas prévu par le système et va alors renvoyer des informations qui lui sont normalement caché, voir même les modifier.


Qu'est ce que c'est ?

Les injections SQL s’effectue principalement sur des formulaires dans des pages Web. Ces formulaires demande des informations à l'utilisateurs (login, mot de passe...), qui vont être saisie par l'utilisateur. Cette saisie est alors utilisé dans la requète SQL afin de récupérer les informations désirées par l'utilisateurs. Cette requète SQL interagie directement sur la base de donnée du serveur.


<<Image exemple formulaire>>


Cependant, certains site web sont mal configuré, et des failles apparaisse alors dans ceux-ci. Par exemple, au lieu de rentrer son login dans le précédant formulaire, on rentre d'autres informations comme :


<<Image exemple injection dans un formulaire>>


Ces caractères sont spéciaux car ils vont interagir directement sur la requète SQL lié au formulaire. Au lieu de se servir des informations présentes dans le formulaire, les informations vont modifier la requête et retourner des informations qui ne sont pas accessible a l'utilisateurs.

L'utilisateur va alors pouvoir effectuer diverse actions sur la base de donnée, comme consulter la liste des personnes présente avec leurs informations personnels, ou même la modifier.


Quels sont les différents types d’injection ?

Connexion sans mot de passe :


<<Image exemple injection dans un formulaire sans mot de passe>>

SELECT * FROM Users WHERE name='User'; -- 'AND password = 'xxx';



Les risques ?

Comment s’en protéger ?