PDO & Sécurité : Le Coffre-Fort du Shogun et les Parchemins Piégés
Comment protéger les trésors du village contre les attaques par injection SQL grâce à la boîte aux lettres blindée des requêtes préparées.
La Base de Données : La Chambre Forte du Fief
Dans les sous-sols du château d'OpenShogun se trouve la pièce la plus précieuse de tout l'empire : la grande réserve centrale (la Base de Données MySQL).
Elle contient des milliers de grands casiers organisés en tableaux (les tables SQL) :
- Le casier
usersavec les pseudos et mots de passe secrets des chefs de guerre. - Le casier
resourcesqui compte chaque grain de riz, planche de bois et minerai de fer. - Le casier
planet_buildingsqui mémorise la hauteur de tes murailles et le niveau de ton donjon Tenshu.
Pour parler au grand archiviste qui garde cette pièce, on utilise un langage spécial : le SQL (Structured Query Language). Par exemple :
SELECT bois, fer FROM resources WHERE user_id = 12;
L'Archiviste du Château (MySQL)
L'archiviste est extrêmement obéissant et très rapide... mais il est un peu trop naïf ! Il exécute au pied de la lettre TOUS les ordres qu'on lui donne sous forme de texte SQL.
L'Attaque par Injection SQL : Le Parchemin Piégé du Bandit
Le piège de la phrase collée (concaténation)
Imagine qu'un développeur distrait écrive son code en collant simplement le pseudo tapé par le joueur dans la phrase SQL :
$sql = "SELECT * FROM users WHERE pseudo = '$pseudoTape'";
Si un bandit rusé se présente au formulaire de connexion et entre comme pseudo ce texte étrange :
' OR '1'='1
La phrase finale lue par l'archiviste devient :
SELECT * FROM users WHERE pseudo = '' OR '1'='1'
Le Coffre est Ouvert Sans Mot de Passe !
En glissant des guillemets et des mots-clés SQL dans un champ de texte innocent, le pirate a transformé une simple donnée en un ordre de triche.
Robert'); DROP TABLE Students;--.
Quand l'école a enregistré son nom dans son ordinateur mal protégé, la base de données a interprété le nom comme un ordre de destruction et a effacé toute la liste des élèves de l'école !
La Solution Magique PDO : Les Requêtes Préparées
Pour neutraliser définitivement ces attaques ninja, les bâtisseurs d'OpenShogun utilisent PDO et ses requêtes préparées (prepare et execute).
Imagine cela comme une boîte aux lettres magique avec une fente blindée. Au lieu de tout mélanger, le système sépare strictement l'action en deux étapes :
$db->prepare(...), on donne l'ordre SQL avec un trou marqué par un point d'interrogation ? (ou :pseudo). L'archiviste prépare le casier à l'avance.
$stmt->execute([$pseudo]), la valeur est transmise à part. Elle est traitée comme du texte pur et inoffensif, jamais comme un ordre exécutable !
Même si un joueur tape ' OR '1'='1 ou DROP TABLE, MySQL se dit simplement : « Tiens, un joueur qui s'appelle bizarrement Monsieur Parchemin ! Je vais chercher un joueur qui a exactement ce nom bizarre ». Rien n'explose, le château reste inviolable !
// Étape 1 : On prépare le modèle d'ordre
$stmt = $db->prepare(
"SELECT * FROM users WHERE pseudo = :nom"
);
// Étape 2 : On injecte la valeur isolée
$stmt->execute([
':nom' => $pseudoDuJoueur
]);
// Étape 3 : On lit les résultats sans peur !
$joueur = $stmt->fetch();
Le Défi de Gabriel : Teste tes Connaissances Sécurité !
2 QuestionsProuve que tu es digne de garder les clés de la chambre forte en répondant sans faute aux deux énigmes !