Autorisation et authentification en PHP : comment sécuriser votre site
La sécurité est l'un des aspects clés de toute application web. En PHP, l'authentification (vérification de l'identité de l'utilisateur) et l'autorisation (détermination de ses droits d'accès) sont mises en œuvre à l'aide d'outils intégrés : sessions, cookies, hachage de mots de passe et interaction avec les bases de données. Dans cet article, nous allons détailler le cycle complet de création d'un système de connexion, d'inscription et de gestion des accès en PHP.
1. Concepts de base
- Authentification — processus de vérification que l'utilisateur est bien celui qu'il prétend être (généralement via un identifiant et un mot de passe).
- Autorisation — vérification qu'un utilisateur authentifié a le droit d'effectuer une action spécifique (par exemple, accéder au panneau d'administration).
- Session — stockage temporaire de données sur le serveur, lié à un visiteur spécifique via un identifiant unique (session ID).
- Hachage de mots de passe — transformation d'un mot de passe en une chaîne irréversible pour un stockage sécurisé en base de données.
2. Inscription d'un utilisateur
La première étape consiste à créer un formulaire d'inscription et un gestionnaire. Le mot de passe n'est jamais stocké en clair — nous utilisons la fonction password_hash().
2.1. Formulaire d'inscription (register.php)
<form method="post" action="register_handler.php"> <input type="text" name="username" placeholder="Identifiant" required> <input type="email" name="email" placeholder="Email" required> <input type="password" name="password" placeholder="Mot de passe" required> <button type="submit">S'inscrire</button></form>2.2. Gestionnaire d'inscription (register_handler.php)
<?php// Connexion à la BDD (PDO)$pdo = new PDO('mysql:host=localhost;dbname=test', 'root', '');
$username = $_POST['username'];$email = $_POST['email'];$password = password_hash($_POST['password'], PASSWORD_BCRYPT); // on hache
$stmt = $pdo->prepare("INSERT INTO users (username, email, password) VALUES (?, ?, ?)");$stmt->execute([$username, $email, $password]);
header('Location: login.php');?>Utilisez
PASSWORD_BCRYPT— il génère automatiquement un sel et est considéré comme suffisamment fiable.
3. Authentification (connexion au système)
Lors de la connexion, nous comparons le mot de passe saisi avec le hachage de la base de données à l'aide de password_verify() et créons une session.
3.1. Formulaire de connexion (login.php)
<form method="post" action="login_handler.php"> <input type="text" name="username" placeholder="Identifiant" required> <input type="password" name="password" placeholder="Mot de passe" required> <button type="submit">Se connecter</button></form>3.2. Gestionnaire de connexion (login_handler.php)
<?phpsession_start();$pdo = new PDO('mysql:host=localhost;dbname=test', 'root', '');
$username = $_POST['username'];$password = $_POST['password'];
$stmt = $pdo->prepare("SELECT * FROM users WHERE username = ?");$stmt->execute([$username]);$user = $stmt->fetch();
if ($user && password_verify($password, $user['password'])) { // Authentification réussie $_SESSION['user_id'] = $user['id']; $_SESSION['username'] = $user['username']; $_SESSION['role'] = $user['role']; // pour l'autorisation header('Location: dashboard.php');} else { echo "Identifiant ou mot de passe incorrect";}?>4. Autorisation (contrôle d'accès)
Après l'authentification, l'utilisateur reçoit un rôle (par exemple, 'user', 'admin', 'moderator'). L'autorisation vérifie ce rôle avant d'exécuter des actions.
4.1. Vérification simple du rôle
<?phpsession_start();
// Vérifie si l'utilisateur est authentifié Aussi dans la bibliothèque
Surveillance des applications Rust : la bibliothèque tracing et les métriques
Validation des données dans Node.js avec Joi : guide complet
Travailler avec XML en TypeScript : bibliothèques pour l'analyse et la création de XML
Cryptographie en Java : chiffrement et hachage – guide pratique
Planificateur de tâches PHP : cron-express