Comprendre le mécanisme
password_verify compare un secret présenté au format de hash attendu. Après une authentification réussie, password_needs_rehash permet de décider une mise à jour avec la politique courante. La transition doit résister aux accès concurrents et ne pas remplacer accidentellement un mot de passe changé entre-temps. Le secret en clair ne doit vivre que le temps strictement nécessaire au traitement.
Raisonner et vérifier
Pour un héritage MD5, identifiez le schéma par une métadonnée maîtrisée, pas seulement une supposition sur la longueur. Vérifiez l’ancien schéma dans un chemin limité et retirez-le dès migration ou réinitialisation. Hacher la chaîne MD5 comme si elle était le secret utilisateur n’équivaut pas à retrouver un stockage direct adapté du mot de passe. Une réinitialisation sûre est préférable lorsqu’une vérification héritée ne peut être maintenue correctement.
Succès préalable
Le rehash suit une vérification réussie. Un échec ne prouve pas un secret légitime. Vérifiez d’abord le secret présenté avec le schéma actuel identifié. Rehasher une valeur incorrecte avant cette étape permettrait de remplacer le credential légitime avec une donnée fournie par l’attaquant.
Erreur fréquente à comprendre
Un mauvais mot de passe doit remplacer le hash stocké.
Un échec ne prouve pas un secret légitime.
Politique cible
password_needs_rehash compare à une politique. La décision de mise à jour n’est pas une authentification. password_needs_rehash compare algorithme et paramètres du hash à ceux demandés. Il ne valide pas le mot de passe et ne réalise pas lui-même l’écriture de migration dans la base.
Erreur fréquente à comprendre
Cette fonction prouve à elle seule que le mot de passe est correct.
La décision de mise à jour n’est pas une authentification.
Version de schéma
Le schéma hérité doit être identifié explicitement. Des formats peuvent se ressembler et demander une métadonnée. Conservez une indication non ambiguë du format historique. Évitez de deviner plusieurs algorithmes successivement après chaque échec, ce qui rendrait la règle d’acceptation difficile à auditer et à retirer.
Erreur fréquente à comprendre
La seule longueur de chaîne prouve toujours l’algorithme.
Des formats peuvent se ressembler et demander une métadonnée.
Original absent
Hacher un ancien MD5 ne retrouve pas l’original. Les entrées sont différentes. Passer une chaîne MD5 à password_hash protège cette chaîne selon une nouvelle couche ; cela ne retrouve pas le mot de passe. Une migration normale réutilise le secret réellement présenté après vérification réussie.
Erreur fréquente à comprendre
password_hash du MD5 produit le même stockage que celui du secret original.
Les entrées sont différentes.
Reset concurrent
Une écriture conditionnelle peut protéger un reset concurrent. Une autre transition légitime peut avoir modifié le compte. Écrivez le nouveau hash seulement si l’ancien hash ou la version du credential correspond encore à la lecture initiale. Sinon, un reset intervenu entre-temps pourrait être écrasé par la migration tardive.
Erreur fréquente à comprendre
La migration doit écraser tout changement intervenu après lecture.
Une autre transition légitime peut avoir modifié le compte.
Retrait par compte
Le chemin hérité doit être retiré pour un compte migré. Le retrait fait partie de l’amélioration recherchée. Quand le format cible est enregistré, ne gardez pas un ancien hash alternatif pour ce compte. Vérifiez que le code de connexion n’accepte plus le chemin hérité après la transition.
Erreur fréquente à comprendre
Un compte migré doit accepter indéfiniment toutes ses anciennes preuves.
Le retrait fait partie de l’amélioration recherchée.
Réinitialisation
Une réinitialisation sûre peut remplacer une migration impossible. Une empreinte n’offre pas cette capacité générale. Si le format ou le secret ne peut être vérifié correctement, prévoyez une réinitialisation par un canal maîtrisé. Ne transformez pas une migration impossible en exception d’authentification permanente.
Erreur fréquente à comprendre
Toute base héritée permet de récupérer les mots de passe en clair.
Une empreinte n’offre pas cette capacité générale.
Vie du secret
Le secret présenté doit être conservé le moins longtemps possible. La preuve de migration peut rester expurgée. Gardez le mot de passe présenté seulement pendant la vérification et le rehash nécessaires. Ne l’insérez pas dans une queue de migration, une trace de requête ou un fichier temporaire.
Erreur fréquente à comprendre
Une migration exige de journaliser les mots de passe.
La preuve de migration peut rester expurgée.
Tests de transition
Les tests doivent couvrir mauvais secret et succès. Le chemin négatif demande une assertion spécifique. Couvrez mauvais secret, succès migré et reset concurrent. Vérifiez à la fois connexion autorisée, hash final et retrait du schéma ancien ; une simple réponse HTTP réussie ne prouve pas la transition.
Erreur fréquente à comprendre
Un seul succès démontre l’absence de modification sur échec.
Le chemin négatif demande une assertion spécifique.
Compatibilité effective
Le format cible doit être vérifiable dans l’environnement. La cible réelle doit supporter la politique choisie. Le runtime qui vérifie les futurs logins doit supporter le format produit. Vérifiez tous les nœuds lors d’une mise à jour progressive afin qu’un compte migré reste utilisable après changement de serveur.
Erreur fréquente à comprendre
Choisir un algorithme indisponible assure une migration opérationnelle.
La cible réelle doit supporter la politique choisie.
Atelier guidé : lire, expliquer et vérifier le code
<?php
declare(strict_types=1);
$hash = password_hash('lab', PASSWORD_BCRYPT, ['cost' => 4]);
var_dump(password_needs_rehash($hash, PASSWORD_BCRYPT, ['cost' => 5])); Dans cet atelier, la politique demandée utilise un coût bcrypt différent de celui du hash stocké. needs_rehash indique donc une différence, sans authentifier le secret. Dans une connexion réelle, placez cette décision après password_verify et protégez l’écriture contre une modification concurrente du credential.
La politique demandée a un coût différent du format actuel. Les paramètres ne correspondent pas. La fonction retourne une décision, pas un secret. Le code ne réalise aucune écriture.
Travail pratique : Simulez connexion correcte, mauvais secret, changement de politique et reset concurrent sur un compte fictif.
Critères de correction : Seul le succès peut déclencher le rehash. L’écriture compare l’état attendu ou utilise une transaction adaptée. Le reset concurrent reste prioritaire et l’ancien chemin est retiré pour le compte migré.
Exemple commenté
Succès de vérification → politique de rehash → écriture conditionnelle du nouveau format
Échec → aucune migration ni sessionLe contrôle de concurrence évite d’écraser un reset intervenu entre lecture et écriture.
Exercice de mise en pratique
Simulez connexion correcte, mauvais secret, changement de politique et reset concurrent sur un compte fictif.
Voir une proposition de correction
Seul le succès peut déclencher le rehash. L’écriture compare l’état attendu ou utilise une transaction adaptée. Le reset concurrent reste prioritaire et l’ancien chemin est retiré pour le compte migré.
Points de vérification
- Rehash après succès.
- Schéma versionné.
- Concurrence et retrait traités.
Contrôle de connaissances
Cours associé : 05. Vérification et migration après succès ↗Validation du module
101 questions, objectif pédagogique de 75 %. Durée conseillée de 150 minutes, sans limite imposée. Les questions et les choix sont mélangés ; le corrigé apparaît après validation. Le contrôle rapide de la leçon et l’examen final du cours restent des exercices distincts.
Commencer ou reprendre les 101 questions →Cette marque suit votre propre avancement ; elle ne certifie pas la maîtrise du sujet. Effectuez l’exercice avant de passer à la suite.
