Aller au contenu

Injection SQL

Une injection SQL se produit quand des données externes modifient la structure d’une requête. Les paramètres lient des valeurs, pas des droits d’accès.

Sécurité informatique

L’injection SQL consiste à introduire des fragments d’instructions SQL par les données qu’une application traite. Si ces valeurs sont intégrées au texte d’une requête, elles peuvent en modifier le sens. Les données lisibles ou modifiables dépendent notamment des droits du compte de base de données utilisé.

Séparer filtre de projet et structure de requête

Un portail de tickets fictif recherche les entrées associées à une référence de projet. Il traite la valeur du champ projectRef comme un paramètre lié : la structure de la requête est fixe et la valeur est transmise séparément par l’interface de base de données. Elle doit rester une valeur de recherche, sans devenir de la syntaxe SQL.

Préparer simplement une requête après l’avoir assemblée à partir des entrées ne crée pas cette séparation. Les données déjà enregistrées ou issues d’autres systèmes ne doivent pas non plus devenir du texte SQL non contrôlé lors d’une construction ultérieure de requête.

Lier les valeurs et fixer les choix de structure

Un champ de tri tel que sortKey est un cas différent. Les paramètres réservés aux valeurs ne remplacent pas des noms de colonnes ou des directions de tri arbitraires. L’application associe donc les choix connus à des colonnes et directions fixes définies dans le code. OWASP décrit explicitement cette distinction entre liaison des paramètres et choix de structure autorisés.

La liaison des paramètres ne vérifie pas non plus le droit de la personne connectée à accéder au projet demandé. Ce contrôle reste du ressort de l’application. Un compte de base de données limité aux droits nécessaires peut réduire les dommages possibles ; il ne supprime pas la construction non sûre des requêtes.

Sources