Politique de mots de passe
Les règles sont codées dans le backend ; aucune variable d'environnement ne les modifie.
Règles selon le parcours
Deux jeux de règles coexistent aujourd'hui :
| Parcours | Règles appliquées |
|---|---|
| Changement par l'utilisateur (Mon profil → Sécurité) | 8 caractères au moins, une majuscule, une minuscule, un chiffre (ProfileController) |
| Réinitialisation par lien « mot de passe oublié » | règles complètes ci-dessous (PasswordPolicyService). Défaut connu : le service appelle une méthode validatePassword qui n'existe pas, ce parcours échoue donc à l'enregistrement du nouveau mot de passe tant que le code n'est pas corrigé |
| Création d'un compte ou nouveau mot de passe saisi par un administrateur (Paramètres → Utilisateurs) | aucune vérification de force |
Commande app:reset-user-password | aucune vérification de force |
Règles complètes de PasswordPolicyService :
| Critère | Exigence |
|---|---|
| Longueur | 12 à 128 caractères |
| Composition | au moins une majuscule, une minuscule, un chiffre et un caractère spécial |
| Mots de passe courants | refusés, y compris contenus dans le mot de passe (liste d'environ cent mots de passe connus) |
| Répétitions et suites | trois caractères identiques à la suite, ou une suite comme 123 ou 987, refusés |
| Informations personnelles | le nom, le prénom et la partie locale de l'adresse e-mail ne doivent pas y figurer |
Un administrateur qui crée un compte doit choisir lui-même un mot de passe conforme aux règles complètes : le système ne le vérifie pas. Ce mot de passe part en clair dans l'e-mail de bienvenue, et l'écran de création ne propose pas d'imposer un changement à la première connexion : demander à l'utilisateur de le remplacer aussitôt dans Mon profil → Sécurité.
Expiration
| Paramètre | Valeur |
|---|---|
| Durée de validité | 90 jours après le dernier changement |
| Avertissement | à partir de 14 jours avant l'échéance |
| Effet | l'état (passwordExpired, mustChangePassword, jours restants) est renvoyé à la connexion ; le frontend redirige vers le profil quand le changement est obligatoire |
Un compte sans date de dernier changement est signalé comme expiré. Seul le changement obligatoire redirige l'utilisateur vers son profil ; une simple expiration ne bloque pas la connexion.
Verrouillage
Cinq échecs de connexion verrouillent le compte pendant 30 minutes. Voir Limitation des requêtes pour le déverrouillage.
Stockage
Les mots de passe sont hachés en bcrypt par le composant de sécurité de Symfony. Aucun mot de passe en clair n'est stocké ni journalisé.
Bonnes pratiques d'exploitation
- Ne jamais transmettre un mot de passe par messagerie ou dans un ticket ; préférer le lien de réinitialisation ou le lien magique.
- Ne jamais écrire un mot de passe dans cette documentation, dans le dépôt ou dans un script.
- Désactiver un compte plutôt que le supprimer quand une personne quitte le projet (traçabilité de l'audit).