Vous êtes sur la page 1sur 1

Nous souhaitons déposer des cookies à des fins de mesure d'audience avec Google Analytics.

Vous êtes libre d'accepter ou de refuser.

En savoir plus Accepter Refuser

BIBLIOTHÈQUE TRIBUNE FORUM Connexion Inscription

Accueil Tutoriels Les injections SQL : le tutoriel Rechercher +

Sommaire Les injections SQL : le tutoriel Licence CC BY

Après la théorie, passons à la pratique !


I Les injections SQL classi…
Publié : vendredi 22 janvier 2016 à 09h00 sécurité php mysql base de données
II Les injections SQL en ave…
Auteur : Que20 Lecture zen
III Il n'y a pas que la sélecti… Catégories : Programmation et algorithmique et Développement Web
Temps de lecture estimé : 2 heures et 15 minutes
IV Du SQL pour sortir de la …
Ce tutoriel abordera les injections SQL par le biais de quelques exemples pratiques.

Partager Il est donc souhaitable d'avoir des bases en SQL mais je m'e orcerai d'expliquer les diverses étapes de sorte que, même si vous
n'avez pas ces compétences, ce tutoriel vous soit accessible.
Twitter

Facebook

Mastodon Si vous ne savez pas ce qu'est une injection SQL, vous pouvez lire l'article d'introduction.

Diaspora*

Envoyer par mail


Ce tutoriel est à but pédagogique et n'a pas pour objectif de pousser à l'illégalité. Vous êtes donc responsable de ce que
vous ferez de ces compétences. Un petit rappel des lois à ce sujet me semble opportun.
Télécharger
Un certain adage dans le domaine de la sécurité dit que pour mieux se protéger de son ennemi il faut le connaître et c'est
HTML (97,9 Kio) dans cette optique qu'est rédigé ce tutoriel.
PDF (294,9 Kio)

LaTeX (80,5 Kio)

EPUB (174,7 Kio) Les exemples qui vont suivre se rapporteront à PHP et à MySQL. Je tiens cependant à préciser que les injections SQL ne
Archive (87,8 Kio) dépendent ni du langage de programmation, ni de la base de données utilisée, mais bien du fait de ne pas véri er les
données qui seront insérées dans la requête, ce qui donne la possibilité au pirate de la détourner.

Tous les chapitres fourniront :

un code source PHP volontairement vulnérable


un exemple d'exploitation de la vulnérabilité

Pour que ces exemples fonctionnent, il faut avoir installé un serveur web (comprenant le PHP) et le SGBDR MySQL.

WAMP (pour Windows), MAMP (pour Mac) ou LAMP (pour GNU/Linux) feront très bien l'a aire.

Ceci dit, même si vous testez ce type de faille avec les meilleures intentions du monde, les lois citées dans le lien ci-dessus sont
bien d'applications. À vos risques et périls si vous testez ce genre de choses sur des sites ne vous appartenant pas, gardez bien cela
en tête ! La sécurité est certes un domaine passionnant, mais il faut être conscient des risques que vous pouvez encourir si vous
dépassez les limites. Par contre, s'il s'agit de vos propres projets personnels, là, bien entendu, vous en faites ce que vous voulez (à
moins qu'il soit possible de porter plainte contre soi-même mais j'ai du mal à voir l'intérêt… ).

En ce qui concerne la base de données, voici la structure que nous utiliserons pour les exercices.

A cher/Masquer le contenu masqué

Concernant la structure des dossiers, voici ce que j'ai à la racine de mon serveur web.

Les liens se rapporteront à cette structure. Donc si vous en avez une autre, il est fort probable qu'ils ne marchent pas, à vous
d'adapter.

Les injections SQL classiques

1. Contournement d'un formulaire 2. A ichage d'enregistrements


d'authentification Exploitation
Exploitation Sécurisation
Sécurisation

Les injections SQL en aveugle

1. Blind SQL Injection 2. Total Blind SQL Injection


Exploitation Exploitation

Il n'y a pas que la sélection dans la vie !

1. Détournement d'un formulaire d'inscription


Exploitation

Du SQL pour sortir de la base de données !

1. Écriture/Lecture d'un fichier


Exploitation
Sécurisation

Comme nous avons pu le voir à travers ces di érents exemples, les injections SQL sont des failles à prendre au sérieux et qui
peuvent faire assez mal.

Elles peuvent malgré tout être assez facilement évitées avec un minimum de bonnes pratiques.

La préparation de requêtes est un excellent moyen de s'en prémunir (je crois que c'est supporté à peu près sur tout les SGBD
actuels). Si maintenant vous ne souhaitez pas utiliser ce principe, il existe toujours les bonnes vieilles fonctions d'échappements
(comme PDO::quote()), de véri cations du type de données. Cela change d'un langage à un autre mais ils possèdent généralement
tous ce type de fonction.

Évitez par contre les systèmes du genre liste noire de mots-clés, car il su t de passer à coté d'un cas (par exemple, beaucoup
ignorent que le OR peut également s'écrire ||) pour que votre sécurité tombe à l'eau.

La plupart des frameworks web actuels intègrent, de base, des protections contre ces failles : ils y sont pour ainsi dire totalement
immunisés (inutile donc de vous acharner sur Zeste de Savoir ). Des CMS comme Wordpress sont, généralement, plus à risque
dû au fait qu'ils intègrent souvent des plugins tiers dont le code n'a parfois pas été véri é : si ces plugins ne traitent pas
correctement les données provenant de l'utilisateur et que ces données sont utilisées dans une requête, votre site peut alors être
vulnérable à ce type d'injection.

En bref, ayez, déjà durant le développement, une optique de sécurité : véri ez toujours ce qui provient de l'utilisateur, même si
cela vous parait anodin, car toute donnée provenant de l'utilisateur peut avoir pour but de détourner votre application, ce qui peut
avoir de fâcheuses conséquences.

7 commentaires

Ge0 Vendredi 22 janvier 2016 à 09h10

Le contenu est intéressant, le style est clair, le sujet est maîtrisé.

Que demande le peuple ?

Toutes mes félicitations pour ce travail conséquent. J'espère qu'on attirera un bon public avec ça :

Les développeurs PHP qui méritent d'être sensibilisés quant aux pièges du langage à éviter ;
Les novices curieux qui souhaitent s'initier sur la chose.

Edit : Typo

Édité par Ge0 vendredi 22 janvier 2016 à 18h42

Anagrams – Je recherche des stagiaires ! +15

Que20 Vendredi 22 janvier 2016 à 10h16

Merci ! Ça fait plaisir, surtout venant de ta part car ce sont tes articles qui m'ont en quelque sorte poussé à écrire (j'espère d'ailleurs qu'il
y en aura d'autres).

+4

Arius Vendredi 22 janvier 2016 à 15h38

Tout comme le samouraï, excellente contribution comme à ton habitude.

"Throw me to the wolves and I will return leading the pack." — Seneca +6

L4rg0 Mardi 18 octobre 2016 à 13h30

Je PLusplusplusplussoie ce tuto !

Tout est possible, tout est réalisable. J’adore les loups

aziz Mardi 07 février 2017 à 11h32

super bien fait !!!

Aneolia Samedi 29 février 2020 à 22h50

Alors c’était censé être accessible aux débutants…hé bien tout est indéchi rable après : "En ce qui concerne la base de données, voici la
structure que nous utiliserons pour les exercices." Où est-ce qu’on trouve la base de données ? Où trouve-t-on les dossiers ?

J’ai toujours dit : l’intelligence c’est de savoir expliquer les choses simplement.

Merci.

-2

Ge0 Dimanche 01 mars 2020 à 12h42

Tu ne sembles pas avoir lu le tutoriel. Le schéma de la base de données est fourni dans l’introduction du tutoriel.

Et je pense que le bon sens commun veuille que, avant de savoir déconstruire, il faut savoir construire. Si tu ne sais ni mettre en place
une base de données et une arborescence de dossiers, alors il te faut acquérir ces bases dans un tutoriel adéquat.

À l’époque il y avait ce tutoriel qui était un élément de choix : https://openclassrooms.com/fr/courses/918836-concevez-votre-site-web-


avec-php-et-mysql

Je ne sais pas s’il est obsolète cela dit. Mais peut-être que ça vaut la peine d’y jeter un œil ?

Anagrams – Je recherche des stagiaires ! +1

Connectez-vous pour pouvoir poster un message. Connexion

Pas encore membre ?


Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.

Créer un compte

Zeste de Savoir • Version : v29.3a-plume/b1b6020 API CGU À propos L’association Adhérer à l'association Contact