Chapitre 25 : Gestion des utilisateurs
Implémentez un système d'authentification sécurisé avec PHP et MySQL
1. Objectif du chapitre
Nous allons créer un système simple d'inscription et de connexion utilisateur avec vérification sécurisée des identifiants.
2. Structure de la table utilisateurs
Voici la structure SQL recommandée pour stocker les informations des utilisateurs :
// Structure SQL pour la table utilisateurs
$sql = "CREATE TABLE utilisateurs ( id INT AUTO_INCREMENT PRIMARY KEY, nom VARCHAR(100) NOT NULL, email VARCHAR(100) NOT NULL UNIQUE, mot_de_passe VARCHAR(255) NOT NULL );";
?>
3. Formulaire d'inscription
Créez un formulaire HTML simple pour l'inscription des utilisateurs :
<input type="text" name="nom" placeholder="Nom" required>
<input type="email" name="email" placeholder="Email" required>
<input type="password" name="mot_de_passe" placeholder="Mot de passe" required>
<button type="submit" name="inscription">S'inscrire</button>
</form>
4. Traitement de l'inscription
Voici le code PHP pour traiter l'inscription et stocker le mot de passe de manière sécurisée :
if (isset($_POST['inscription'])) {
$nom = htmlspecialchars($_POST['nom']);
$email = $_POST['email'];
$mot_de_passe = password_hash($_POST['mot_de_passe'], PASSWORD_DEFAULT);
$pdo = new PDO('mysql:host=localhost;dbname=ma_base;charset=utf8', 'root', '');
$stmt = $pdo->prepare("INSERT INTO utilisateurs (nom, email, mot_de_passe) VALUES (?, ?, ?)");
$stmt->execute([$nom, $email, $mot_de_passe]);
echo "Utilisateur inscrit avec succès !";
}
?>
- Toujours utiliser
password_hash()pour stocker les mots de passe - Utiliser des requêtes préparées pour éviter les injections SQL
- Valider et filtrer les entrées utilisateur
5. Formulaire de connexion
Créez un formulaire pour la connexion des utilisateurs existants :
<input type="email" name="email" placeholder="Email" required>
<input type="password" name="mot_de_passe" placeholder="Mot de passe" required>
<button type="submit" name="connexion">Se connecter</button>
</form>
6. Traitement de la connexion
Voici comment vérifier les identifiants de connexion de manière sécurisée :
if (isset($_POST['connexion'])) {
$email = $_POST['email'];
$mot_de_passe = $_POST['mot_de_passe'];
$pdo = new PDO('mysql:host=localhost;dbname=ma_base;charset=utf8', 'root', '');
$stmt = $pdo->prepare("SELECT * FROM utilisateurs WHERE email = ?");
$stmt->execute([$email]);
$utilisateur = $stmt->fetch(PDO::FETCH_ASSOC);
if ($utilisateur && password_verify($mot_de_passe, $utilisateur['mot_de_passe'])) {
echo "Connexion réussie. Bienvenue, " . htmlspecialchars($utilisateur['nom']) . " !";
} else {
echo "Identifiants incorrects.";
}
}
?>
7. Bonnes pratiques
- Utilisez
password_hash()etpassword_verify()pour gérer les mots de passe - Assainissez les entrées avec
htmlspecialchars()pour l'affichage - Vérifiez l'unicité de l'email avant l'insertion
- Ajoutez une session pour gérer l'authentification persistante
- Utilisez toujours des requêtes préparées avec PDO
- Limitez les tentatives de connexion pour prévenir les attaques par force brute
8. Exercice pratique : Créez votre système d'inscription et de connexion
🎯 Objectif : Implémenter un système d'inscription et de connexion sécurisé en PHP, avec stockage des mots de passe hachés et validation des identifiants.
Consignes :
- Créer une base de données
ma_baseavec la tableutilisateurs - Créer une page
register.phpcontenant le formulaire d'inscription - Créer une page
login.phpcontenant le formulaire de connexion - Stocker les mots de passe avec
password_hash() - Vérifier l'identité de l'utilisateur avec
password_verify() - Afficher un message personnalisé à la connexion
Bonus :
- Empêchez les doublons d'inscription avec une adresse email déjà utilisée
- Ajoutez un système de
logoutavec session - Personnalisez les messages d'erreur et de succès
- Ajoutez une fonctionnalité "Se souvenir de moi" avec des cookies sécurisés
✅ À la fin de l'exercice, vous disposerez d'une base solide pour créer des espaces membres sécurisés en PHP.
9. Résumé
- ✅ Création d'un formulaire d'inscription sécurisé
- ✅ Stockage des mots de passe chiffrés avec
password_hash() - ✅ Connexion avec vérification des identifiants via
password_verify() - ✅ Utilisation de requêtes préparées pour la sécurité
- ✅ Bonnes pratiques d'hygiène de code et de sécurité
Vous êtes maintenant capable de créer une authentification simple et sécurisée en PHP.