L’injection de code SqL est une faille de sécurité existant sous diverse formes depuis l’existence des bases de données.
Dans cette page vous découvrirez comment internet fournis un support de jeux aux pirates de toutes sorte avec l’arrivée des sites dynamiques.
Si cet exemple vous présentent l’utilisation du formulaire d’une page d’identification, pour prendre l’identité d’un membre, ces méthodes sont aussi efficace pour lister des produits cachés, changer les données affiché sur une fiche produits.
Sur un site marchand on peu ainsi passer une commande de 1 ou 2 euros au lieux de 100 ou 200 .
Ces méthodes permettent également de prendre des droits à l’intérieur d’un site ou vous seriez connecté en tant qu’utilisateur légalement enregistré.
L’utilisation de ces méthodes sont assimilé à de l’effraction selon le code pénal .
Fournir de l’aide à sa réalisation est également interdit, je resterais donc dans le domaine du « documenté » c’est a dire ce que n’importe qui peu trouver en lisant la documentation d’un SGBD Système de gestion de base de données
Ces problèmes et ces solutions sont publique depuis l’existence des bases de données, il ne s’agit pas d’un bug, mais du fonctionnement normal de la base de donnée qui n’est même pas à remettre en cause !
SQL en sept lignes
SQL est un language de programation qui simplifie enormement les acces au données.
On l’utilise ainsi en francais : Donne moi tout le contenu de la base table_utilisateurs dont le nom d’utilisateur ( identifiant) est xxx et le mot de passe ( password ) est yyy
Ce qui se traduis par : SELECT * FROM table_utilisateurs WHERE identifiant = ‘xxx’ AND password = ‘yyy’ .
Falsifier son identité avec SQL
L’idée est simple .
Utiliser un champ de formulaire pour modifier la requête que vous effectuez.
Imaginez, sur une page de connexion que vous ayez deux champs à remplir sur un site pour vous connecter avec votre compte.
Fournir le nom xxx et le mot de passe yyy et cliquez sur connexion .
Le code qui s’exécutera demandera des données à la base SQL.
Exemple :
SELECT * FROM table_utilisateurs WHERE identifiant = ‘xxx’ AND password = ‘yyy’ .
Si xxx existe et a bien yyy comme mot de passe vous serez connecté sous le pseudo de xxx.
Méthode 1 : Cacher des champs
Remplissons le formulaire ainsi
identifiant xxx’ –
et
mot de passe rien ou n’importe quoi.
Le code qui s’exécutera demandera des données à la base SQL.
Exemple :
SELECT * FROM table_utilisateurs WHERE identifiant = ‘xxx’ — ‘ AND password = ‘yyy’ .
Les caractères – isolent la fin de la requête et donc vous êtes connecté en tant que xxx sans connaître le mot de passe.
Méthode 2 : Ajouter du code SQL
Remplissons le formulaire ainsi
identifiant rien ou n’importe quoi
et
mot de passe : ‘ OR 1
Le code qui s’exécutera demandera des données à la base SQL.
Exemple
SELECT * FROM table_utilisateurs WHERE identifiant = ” OR 1 — ‘ AND password = ‘yyy’ .
Ce qui fournira une liste complète de tous les utilisateurs.
Et la protection
Comme tous système que vous publierez sur internet, il reste toujours des failles exploitables.
Même si vous êtes sûr de votre sécurité gardez à l’esprit qu’il existe quelque part quelqu’un qui saura trouver votre faille.
Je cites quelques solutions très efficaces.
La plus efficace de toute : Limiter l’accès aux membres par leur IP fixe, en effet un bug dans votre formulaire d’identification ne serais plus un problème, vous pourriez même vous passer de formulaire d’identification.
Fixez des dimensions aux champs.
En effet obliger un nom d’utilisateur et un mot de passe à 8 caractères ( par example ) vous permet d’identifier immédiatement ceux qui ne fournissent pas deux fois 8 caractères et donc qui essayent de rentrer sur votre site.
Tester les champs, les champs vides sont également des sources de détection de hacker.
Interdisez l’utilisation des – et des ‘ à l’intérieur des identifiants et des mots de passe.
Si les chaînes fournies via le formulaire contiennent des – ou de ‘, c’est une tentative de piratage.
Utilisez le backslash ( antislash ) , avant de soumettre votre requête.
En effet :
SELECT * FROM table_utilisateurs WHERE identifiant = ‘\’ OR 1 — \’ AND password = ‘yyy’ .
Provoquera une erreur SQL
L’utilisation de chiffres, comme des chiffres est un problème.
Si le mot de passe ou le login est traité comme un chiffre et non une chaîne alphanumérique, il est possible de facilement passer du code SQL , même sans ‘
Une autre idée consiste à compter le nombre de réponse :
Si il y a plusieurs réponse c’est un hacker .
Et la solution de paranoïaque :
Détecter tout code SQL présent dans les chaînes identifiant et mot de passe.
Mais si il passe ?
Une des meilleurs idées que j’ai eu depuis que je fait de l’informatique consiste non plus à sécurisé mais a fournir de mauvaises informations à ceux qui arriveraient à passer .
Vous comprendrez aussi que le code SQL injecter permet d’obtenir un compte utilisateur et bien souvent le premier.
Ma solution est toute bête.
Le premier compte utilisateur contenu dans la base de donnée est le plus bas niveau de droit que possède mon site.
Le fait de se connecter avec ce compte, qui ne possede aucun droit déclenche immédiatement un envois de mail avec les informations qui me permettent de tracer le pirate informatique.
Mesdames et messieurs, internautes, modifiez vite l’index de votre compte administrateur qui est le premier dans votre site, si,si vérifiez .
On peux rentrer chez vous avec cette méthode , Je prend le premier compte .
login : rien ou n’importe quoi
et
mot de passe : ‘ OR 1 LIMIT 1 —
requête :
SELECT * FROM table_utilisateurs WHERE identifiant = ” OR 1 LIMIT 1 — ‘ AND password = ‘yyy’ .
Bon débuggage.

