Autorisation et authentification en PHP : Guide complet avec exemples

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

Autorisation et authentification en PHP : des bases à la sécurité



Dans le développement web moderne, l'authentification (vérification de l'identité de l'utilisateur) et l'autorisation (vérification des droits d'accès) sont des mécanismes de sécurité fondamentaux. En PHP, ces processus sont implémentés via la gestion des sessions, des cookies, du hachage de mots de passe et des jetons. Dans cet article, nous aborderons tous les aspects clés nécessaires à la création d'un système de connexion sécurisé sur le site éducatif pythonlib.ru.



1. Concepts de base : authentification vs autorisation



Avant d'écrire du code, il est important de distinguer clairement ces deux termes :



  • Authentification — processus de vérification que l'utilisateur est bien celui qu'il prétend être (identifiant + mot de passe, biométrie, jeton).
  • Autorisation — détermination des ressources et actions accessibles à un utilisateur authentifié (rôles : administrateur, modérateur, utilisateur).


En PHP, l'authentification est généralement effectuée via des sessions ou JWT, et l'autorisation via la vérification des rôles dans la base de données.



2. Hachage de mots de passe : ne stockez jamais les mots de passe en clair



PHP fournit des fonctions intégrées pour le hachage sécurisé des mots de passe. Utilisez password_hash() et password_verify() — c'est la norme moderne.



// Inscription d'un utilisateur$password = $_POST['password'];$hashedPassword = password_hash($password, PASSWORD_BCRYPT, ['cost' => 12]);

// Enregistrer $hashedPassword dans la base de données$sql = "INSERT INTO users (email, password_hash) VALUES (?, ?)";$stmt = $pdo->prepare($sql);$stmt->execute([$_POST['email'], $hashedPassword]);


// Vérification lors de la connexion$inputPassword = $_POST['password'];$storedHash = $user['password_hash']; // depuis la base de données

if (password_verify($inputPassword, $storedHash)) { // Authentification réussie $_SESSION['user_id'] = $user['id'];} else { // Mot de passe incorrect}


3. Gestion des sessions en PHP



Les sessions sont la méthode la plus courante pour suivre les utilisateurs authentifiés. PHP génère automatiquement un identifiant de session unique et le stocke dans un cookie.



// Démarrage de la session (toujours au début du script)session_start();

// Après une connexion réussie$_SESSION['user_id'] = $user['id'];$_SESSION['user_role'] = $user['role']; // pour l'autorisation$_SESSION['logged_in'] = true;

// Vérification de l'authentification sur les pages protégéesfunction requireAuth() { if (!isset($_SESSION['logged_in']) || $_SESSION['logged_in'] !== true) { header('Location: /login.php'); exit; }}

// Déconnexionsession_destroy();setcookie(session_name(), '', time() - 3600, '/');


4. Sécurité des sessions : protection contre les attaques



Pour prévenir le détournement de session (Session Hijacking) et la fixation de session (Session Fixation), utilisez les mesures suivantes :



  • Régénération de l'ID de session après la connexion :


session_regenerate_id(true); // supprime l'ancienne session


  • Vérification du User-Agent et de l'IP (facultatif mais améliore la sécurité) :


$_SESSION['user_agent'] = $_SERVER['HTTP_USER_AGENT'];

// À chaque requêteif ($_SESSION['user_agent'] !== $_SERVER['HTTP_USER_AGENT']) { session_destroy(); die('Activité suspecte');}


  • Définition des indicateurs pour le cookie de session dans php.ini ou via session_set_cookie_params() :


session_set_cookie_params([    'lifetime' => 0,           // jusqu'à la fermeture du navigateur    'secure' => true,          // HTTPS uniquement    'httponly' => true,        // inaccessible depuis JavaScript    'samesite' => 'Strict'     // protection contre CSRF]);session_start();


5. JWT (JSON Web Tokens)

Recommendations