Aller au contenu
M08 · B. Assurer la confidentialité des données

Les droits d'accès des utilisateurs d'une application

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.

1Situer

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.

2Comprendre

Vérifier les droits à chaque requête
Aminaclient_id = 1 facture.php?id=1 Contrôles 1. connecté ?✔ 2. la sienne ?✖ Facture n° 1 Amina · 270 DH fuite WHERE id = ? AND client_id = ?

Amina, connectée, ouvre facture.php?id=1 : c'est sa commande.

1 / 4

S’identifier n’est pas tout

Les modèles de contrôle d’accès

ModèlePrincipeExemple
Par rôle (RBAC)les droits sont attachés à des rôles, les utilisateurs reçoivent un rôleadmin, préparateur, client (leçon C.2)
Par propriétaireon n’accède qu’à ce qui nous appartientun client et SES commandes
Par attributsla décision dépend de règles sur l’utilisateur, l’objet, le contexteun 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.

La faille IDOR

Contrôler côté serveur, partout

Les règles d’or :

  • Refuser par défaut : une page ou une API sans vérification explicite est inaccessible.
  • Vérifier à chaque requête, sur le serveur : masquer un bouton ou un lien ne protège rien.
  • Les API aussi : api/commandes.php?id=2 doit faire le même contrôle que la page HTML.
  • Lire l’identité dans la session, jamais dans un paramètre (?client_id=1) ni dans un cookie modifiable (leçon A.5).

Un accès sécurisé à la base

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.

Exemple simple

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).

Exemple simple

Le numéro de vestiaire

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.

3Manipuler

Connectez-vous en Amina (amina.benali@mail.ma / Atlas2025) puis ouvrez facture.php?id=2 : c'est la facture de Youssef. Corrigez facture.php pour que chaque client ne voie que ses propres commandes.
Pas à pas dans le lab ↗ Cliquez sur Exécuter : PHP 8.3 démarre dans votre navigateur (environ 5 Mo à télécharger, une seule fois).

La page s'affichera ici.

Le navigateur demandera /connexion.php au serveur, qui exécutera le PHP et renverra du HTML.

Entre le navigateur et le serveur aucun échange pour l'instant

Consignes 0 / 3

  1. Amina voit sa facture n° 1 (Amina Benali, 270 DH)
  2. Amina ne voit pas la facture n° 2 de Youssef (404)
  3. Sans connexion, facture.php renvoie vers connexion.php

4Pratiquer

Exercice 1 · Les droits du compte MySQL

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.

Voir le corrigé
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';

Exercice 2 · Matrice des droits

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).

Voir le corrigé
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.

5Vérifier

1. Quelle est la différence entre authentification et autorisation ?
2. Une faille IDOR, c'est...
3. Cacher le bouton « Supprimer » aux non-administrateurs suffit-il ?