Le badge de l'hôtel
La carte de votre chambre ouvre la porte 214, pas la 215. L'hôtel sait que vous êtes client (authentification) ET vérifie, porte par porte, que celle-ci est la vôtre (autorisation).
Authentification et autorisation, le principe du moindre privilège, les modèles de contrôle d'accès (par rôle, par propriétaire), la faille IDOR (accès direct à l'objet d'un autre), le contrôle systématique côté serveur et les droits limités du compte MySQL de l'application.
Amina est connectée et consulte sa facture : facture.php?id=1. Que se passe-t-il si elle tape id=2 ? Si le site affiche la facture d'un autre client, c'est le premier risque de l'OWASP Top 10, le contrôle d'accès défaillant. Être connecté ne veut pas dire avoir le droit de tout voir.
Amina, connectée, ouvre facture.php?id=1 : c'est sa commande.
| Modèle | Principe | Exemple |
|---|---|---|
| Par rôle (RBAC) | les droits sont attachés à des rôles, les utilisateurs reçoivent un rôle | admin, préparateur, client (leçon C.2) |
| Par propriétaire | on n’accède qu’à ce qui nous appartient | un client et SES commandes |
| Par attributs | la décision dépend de règles sur l’utilisateur, l’objet, le contexte | un préparateur de Fès ne voit que les commandes de Fès |
Une application réelle combine souvent les deux premiers : le rôle dit quelles pages on peut ouvrir, la propriété dit quelles lignes on peut voir.
Les règles d’or :
api/commandes.php?id=2 doit faire le même contrôle que la page HTML.?client_id=1) ni dans un cookie modifiable (leçon A.5).L’application elle-même ne doit pas avoir tous les droits sur MySQL. Avec le compte root, une seule injection SQL permet de tout supprimer, de lire les autres bases, voire de créer des comptes. On crée un compte dédié avec le strict nécessaire (exercice 1), et un autre compte, utilisé seulement par l’administrateur, pour les changements de structure. Le mot de passe de ce compte vit dans un fichier de configuration hors du dossier public.
La carte de votre chambre ouvre la porte 214, pas la 215. L'hôtel sait que vous êtes client (authentification) ET vérifie, porte par porte, que celle-ci est la vôtre (autorisation).
Si le vestiaire rend le manteau à quiconque annonce un numéro, il suffit d'essayer 1, 2, 3... C'est la faille IDOR : l'identifiant ne doit jamais servir de preuve.
La page s'affichera ici.
Le navigateur demandera /connexion.php au serveur, qui exécutera le PHP et renverra du HTML.
Consignes 0 / 3
Le site Souk Atlas se connecte à MySQL en root. Créez un utilisateur souk_app qui ne peut que lire et modifier les données de la base souk depuis le serveur local, sans pouvoir supprimer de table ni créer d'utilisateur.
CREATE USER 'souk_app'@'localhost' IDENTIFIED BY 'Un-Mot-De-Passe-Long-2025!'; GRANT SELECT, INSERT, UPDATE, DELETE ON souk.* TO 'souk_app'@'localhost'; -- pas de DROP, ALTER, GRANT OPTION ni de droits sur les autres bases SHOW GRANTS FOR 'souk_app'@'localhost';
Pour Souk Atlas, construisez une matrice : rôles (visiteur, client, préparateur de commandes, administrateur) × actions (voir le catalogue, passer commande, voir ses commandes, voir toutes les commandes, changer un statut, modifier les prix, gérer les comptes).
Visiteur : voir le catalogue. Client : voir le catalogue, passer commande, voir SES commandes. Préparateur : voir le catalogue, voir toutes les commandes, changer un statut (en préparation, expédiée). Administrateur : tout, y compris modifier les prix et gérer les comptes. Chaque case « non » doit être vérifiée côté serveur, pas seulement cachée dans le menu.