Une injection SQL est un type d'attaque contre un site web qui utilise le langage SQL en l'ajoutant à des paramètres d'entrée d'une page.
Prenons un exemple
Sur votre site, une page nommée exemple.php?id=456 contient des paramètres en entrée comme un numéro d'identifiant d'un enregistrement en base de données.
Votre page exemple.php va ensuite contenir du code SQL qui va chercher les informations dans une base de données qui correspondent à l'identifiant 456.
Exemple :
SELECT * FROM actualites WHERE id='456'
L'attaquant peut utiliser cette porte d'entrée pour transformer la requête ?id=456 en ?id=' OR 1=1
La requête qui va se lancer maintenant sera :
SELECT * FROM actualites WHERE id='' OR 1=1
Le résultat de la page sera alors complètement différent et peut afficher ici l'ensemble des données de votre table actualites.
Cet exemple est bien sur simplifié et les injections SQL peuvent être trés complexes et être utilisées pour différents objectifs comme :
- Récupérer des données (mot de passe, email...)
- Modifier des données
- Supprimer des données
- Exécuter des commandes systèmes
- Lire ou écrire sur le système de fichier du serveur
Que faire ?
Développer en utilisant des requêtes préparées, avec la librairie PDO dans le cadre du langage PHP. Et sinon faire appel à SiteProtect.fr pour sécuriser votre site :-)
Même avec PDO le code suivant n'est pas bon car des injections SQL sont possibles avec les variables login et password :
<?php
// On récupère les variables envoyées par le formulaire
$login = $_POST['login'];
$password = $_POST['password'];
// Connexion à la base de données avec PDO
try { $bdd = new PDO('mysql:host=localhost;dbname=bdd','votre-login','votre-mot-de-passe'); }
catch (Exeption $e) { die('Erreur : ' .$e->getMessage()) or die(print_r($bdd->errorInfo())); }
// Requête SQL
$user = $bdd->query("SELECT * FROM utilisateurs WHERE login='$login' AND password='$password'");
?>
Le code suivant est valide car la requête est protégée, les paramètres ne sont pas concaténés mais envoyés séparément :
<?php
// On récupère les variables envoyées par le formulaire
$login = $_POST['login'];
$password = $_POST['password'];
// Connexion à la base de données avec PDO
try { $bdd = new PDO('mysql:host=localhost;dbname=bdd','votre-login','votre-mot-de-passe'); }
catch (Exeption $e) { die('Erreur : ' .$e->getMessage()) or die(print_r($bdd->errorInfo())); }
// Requête SQL sécurisée
$user = $bdd->prepare("SELECT * FROM utilisateurs WHERE login=? AND password=?");
$user->execute(array($login, $password));
?>
La encore cet exemple est simplifié au maximum dans le cadre de cet article. Nous ne parlons pas non plus de hachage des mots de passe qui sont stockés en clair dans ce code.
Une meilleure pratique aurait été de hacher le mot de passe avant de le comparer au mot de passe stocké (en étant haché) en base de données :
<?php
$hash = \password_hash($password, PASSWORD_DEFAULT);
?>

Par Thibaut Pietri
Derniers articles
Audit GEO : 10 points pour savoir si votre site est prêt pour les moteurs IA
22 mai 2026 Le GEO, ou Generative Engine Optimization, consiste à optimiser un site pour qu’il soit mieux compris, cité et recommandé par les moteurs de recherche IA comme ChatGPT, Gemini, Perplexity ou les nouvelles réponses générées de Google. Mais votre site est-il vraiment prêt ? Voici une checklist en 10 points essentiels pour réaliser un premier audit GEO.
Protéger vos formulaires sans réduire votre taux de conversion : quelles solutions captcha choisir ?
30 avril 2026 Les captchas sont devenus indispensables pour protéger les formulaires d’un site web contre le spam et les robots. Formulaire de contact, inscription, demande de devis… tous peuvent être ciblés. Mais toutes les solutions ne se valent pas.
Vidéo en 2026 : ce qui change
4 février 2026 En 2026, la vidéo n’est plus un simple format « sympa » : c’est devenu le langage central du digital. Visibilité, notoriété, conversion, marque employeur, communication interne… tout passe par des contenus vidéo plus réguliers, plus ciblés et mieux structurés
A ne pas négliger, les injections SQL représentent encore à ce jour 50% des attaques d'applications web. A voir sur l'article Quelques indicateurs sur la cybersécurité en 2019
Il y a 7 ans | Répondre