Chapitre 11Projet DevBlog

Authentification — Inscription et connexion

password_hash, password_verify, sessions et protection des pages

Concepts Théoriques

L'authentification permet d'identifier les utilisateurs : qui est admin (peut créer/modifier/supprimer des articles), qui est simple visiteur (peut commenter). C'est la brique de sécurité la plus importante.

Hasher les mots de passe — JAMAIS en clair

Stocker un mot de passe en clair dans la base de données est une faute grave. Si la base est piratée, tous les mots de passe sont exposés.

PHP offre deux fonctions :

  • password_hash($password, PASSWORD_DEFAULT) — transforme "monMotDePasse" en "$2y$10$abc123..." (un hash irréversible). Même PHP ne peut pas retrouver le mot de passe original.
  • password_verify($password, $hash) — compare un mot de passe saisi avec le hash stocké. Retourne true ou false.

PASSWORD_DEFAULT utilise actuellement bcrypt, mais PHP changera automatiquement pour un algorithme plus sûr dans le futur — votre code restera compatible.

Le flux d'inscription

  1. Afficher le formulaire (nom, email, mot de passe, confirmation)
  2. Valider (email unique, mot de passe min 8 caractères, confirmation identique)
  3. Hasher le mot de passe
  4. Insérer dans la table users
  5. Connecter automatiquement (stocker l'id en session)
  6. Rediriger vers le dashboard

Le flux de connexion

  1. Afficher le formulaire (email, mot de passe)
  2. Chercher l'utilisateur par email
  3. Vérifier le mot de passe avec password_verify()
  4. Si correct : stocker l'id et le rôle en session, rediriger
  5. Si incorrect : afficher une erreur GÉNÉRIQUE ("Email ou mot de passe incorrect") — ne jamais dire lequel est faux

Protéger les pages admin

Créez une fonction requireAuth() qui vérifie si l'utilisateur est connecté et a le bon rôle. Appelez-la en haut de chaque page protégée. Si l'utilisateur n'est pas connecté, redirigez vers la page de connexion.

C'est l'équivalent du middleware de Laravel — ici on le fait manuellement.

> Sécurité : Le message d'erreur à la connexion doit être générique ("Email ou mot de passe incorrect"). Si vous dites "Cet email n'existe pas", un attaquant peut savoir quels emails sont inscrits.