Logo


Xanetiz > Programmation > Les injections SQL

Top

Les injections SQL

Les injections SQL


4 835 vues

Partager

Le fonctionnement d'une base de données

Une base de données (BDD) comme son nom l'indique est faite pour contenir des données de manière organisée. On peut la visualiser comme un tableau.

Chaque colonne représente un attribut et chaque ligne représente un tuple. Un regroupement d'attributs représente une table.

On peut voir les tables comme des livres que l'on rangerait dans des bibliothèques : les bases de données.

Les injections SQL

Les requêtes SQL sont des commandes qui permettant de questionner une base de données afin de recevoir des données précises. Ainsi, on peut demander de nous renvoyer la liste des utilisateurs inscris sur un site ou le titre des news sur une page d'accueil. Ces deux requêtes sont indépendantes des utilisateurs parcourant votre site. Par exemple (avec la table précédente) :

SELECT Marque FROM Ordinateur;

Cette requête va nous renvoyer la liste des marques contenues dans la table ordinateur.

Un système de connexion à un site va aussi utiliser une requête SQL pour vérifier si le pseudo et le mot de passe saisis correspondent bien à un utilisateur inscrit au site. Ces données étant stockées dans une base de données, il va falloir comparer avec tous les utilisateurs présents dans la table correspondant aux membres. La requête est ainsi dépendante des informations saisies par l'utilisateur, elle les utilise dans sa requête. Par exemple :

SELECT pseudo, mdp FROM membres WHERE pseudo = '$pseudo' AND mdp = '$pass';

$pseudo représente le pseudo que l'utilisateur a tapé dans la zone de saisie "Pseudonyme", pareil pour $pass qui représente le mot de passe. Normalement, si la transmission se fait par POST, ces deux variables auraient la forme $_POST['pseudo'] et $_POST['mdp'].

Le problème des injections SQL

L'injection SQL représente le fait qu'un utilisateur va saisir des informations qui vont être utilisées dans une requête SQL de manière à modifier son fonctionnement. Le but est donc de changer la requête à son profit. Pour ça, il suffit d'ajouter un caractère de fin de chaîne dans le champ de saisie et insérer ce que l'on veut ensuite ou terminer la requête.

Si un utilisateur tape dans le champ "Pseudo" ceci : Baptiste '; -- la requête va être transformée en :

SELECT pseudo, mdp FROM membres WHERE pseudo = 'Baptiste';

Plus besoin de mot de passe, la connexion est réussie. Vous avez donc en quelque sorte envoyé du SQL dans le champ réservé au pseudo, d'où le nom injection SQL.

Si la requête est effectuée en PHP avec MySQL, l'utilisateur pourrait taper : Baptiste "); #

Avant :

mysql_query("SELECT pseudo, mdp FROM membres WHERE pseudo = '$pseudo' AND mdp = '$mdp' ");

Après :

mysql_query("SELECT pseudo, mdp FROM membres WHERE pseudo = 'Baptiste' ");

Comment se protéger ?

Heureusement, la protection est très simple. Il suffit juste d'utiliser la fonction mysql_real_escape_string(). Celle-ci va tout simplement désactiver les caractères de fins de chaînes comme ' ou ". Pour cela, elle va ajouter des antislashs \ devant afin de les échapper, c'est à dire qu'ils seront considérés comme de simples caractères.

Ainsi, pour chaque fonction SQL qui utilise des informations envoyées par un utilisateur, vous devez placer les variables dans la fonction mysql_real_escape_string avant d'exécuter la requête.

Dans notre cas, ça aurait donné :

mysql_real_escape_string($pseudo);
mysql_real_escape_string($mdp);

mysql_query("SELECT pseudo, mdp FROM membres WHERE pseudo = '$pseudo' AND mdp = '$mdp' ");

La requête est maintenant securisée.

Pour résumer

Titre Vu Date
Compiler avec GCC sur Linux Compiler avec GCC sur Linux 9 366 16/02/10
Exécuter un script PHP en ligne de commande Exécuter un script PHP en ligne de commande 3 576 04/04/12
Le XML Le XML 3 963 13/02/10
L'essentiel du CSS L'essentiel du CSS 4 183 14/03/10
Les pointeurs en C Les pointeurs en C 4 772 13/02/10

StatistiquesNombre d'inscrits : 174
Dernier membre : stiv68
Visiteurs en ligne : 3
Membres en ligne : Aucun

Copyright © 2016 Xanetiz.com - Tous droits réservés

Hebdotop