Développeurs : les fausses bonnes idées répandues sur les formulaires de connexion
Obliger l'utilisation de caractères spéciaux, limiter la longueur des mots de passe, forcer à changer de mot de passe régulièrement...
Nous assistons, ces dernières années, à une prise de conscience globale du rôle majeur de la protection des mots de passe dans la sécurité informatique des entreprises. En témoigne la hausse de 50 % de l’utilisation de gestionnaires de mots de passe observée par le LINC (Laboratoire d’innovation numérique de la CNIL) et Médiamétrie entre 2018 et 2019 (1). Tandis que les autorités compétentes telles que l’ANSSI prodiguent bons conseils et guides pratiques pour aider les professionnels à adopter les bons réflexes, certains freins persistent. C’est par exemple le cas de ces quatre contraintes que l’on retrouve encore fréquemment dans les formulaires de mots de passe… et qui n’aident pas à engager les collaborateurs dans des pratiques plus sécurisées.
1- Imposer un nombre maximum de caractères
Aujourd’hui encore, de nombreux formulaires de mots de passe limitent la saisie à un certain nombre de caractères, parfois 8 ou 12 caractères seulement ! Cette restriction provient peut-être d’une volonté d’éviter les attaques par déni de service (2) via l’envoi de contenus de plusieurs mégabits voire gigabits. Elle découle peut-être aussi de l’idée que l’utilisateur ne sera pas en capacité de retenir le mot de passe s’il est trop long.
Le problème est que cette contrainte empêche les utilisateurs de choisir des mots de passe vraiment forts et générés aléatoirement. Donc cette pratique est un frein majeur à l’adoption des coffres-forts de mots de passe et produit donc l’effet inverse de l’effet désiré sur la sécurité de l’utilisateur !
Pour répondre au deux enjeux (éviter les attaques par déni de service et permettre l’utilisation des coffre-forts de mots de passe), définissez la longueur maximal d’un champ mot de passe à 500 caractères. C’est largement suffisant dans les deux cas.
2- Imposer au moins 8 caractères, une minuscule, une majuscule, un chiffre, un caractère spécial
Bien connues, les jauges du type “Veuillez saisir au moins 8 caractères, une minuscule, une majuscule, un chiffre et un caractère spécial” sont fréquentes dans les formulaires de mots de passe. Le principe est fondé puisqu’en effet, plus le mot de passe contiendra de caractères différents, plus il sera complexe à déchiffrer pour un hacker.
Le problème, c’est que cela n’a pas un gros effet sur la sécurité des mots de passe car les utilisateurs vont utiliser des mécanismes de substitution évidents qui ralentiront à peine les pirates. Par exemple ’i’ deviendra ’1’, ’a’ deviendra ’@’ et ’s’ deviendra ’$’.
Comme nous l’expliquons dans notre article “Qu’est-ce qu’un mot de passe fort ?“, la force d’un mot de passe dépend avant tout de sa longueur.
Notre conseil est donc d’imposer surtout une longueur de mots de passe d’au moins 12 caractères (voire 14) et d’afficher à l’utilisateur une évaluation de la force de son mot de passe grâce à des librairies comme zxcvbn. Imposez aussi d’utiliser tous les types de caractères puisque les utilisateurs y sont habitués et que ça ne fait pas de mal.
3- Imposer un renouvellement régulier des mots de passe de vos collaborateurs
Le renouvellement des mots de passe est un sujet qui divise. Certains préfèrent imposer le changement régulier des mots de passe, partant du principe qu’en cas de fuite de données, le renouvellement du mot de passe fera perdre l’accès au pirate via l’ancien mot de passe devenu obsolète.
Cette règle est selon nous peu pertinente, car
- En cas de fuite de données, changer son mot de passe plusieurs semaines ou mois plus tard sera probablement déjà beaucoup trop tard.
- Le fait de sursolliciter les utilisateurs en leur imposant de changer leurs mots de passe trop souvent risque de les décourager ou de créer chez eux des comportements qui n’arrêteront aucun hacker, comme le fait d’ajouter une date ou un numéro à la fin du mot de passe existant par exemple…
- Sans compter qu’imposer un renouvellement fréquent des mots de passe génère bien souvent de la perte de temps en termes de gestion des mots de passe oubliés pour les responsables informatiques…
- Par ailleurs, si le site a détecté la fuite de données, il pourra en avertir ses utilisateurs qui devront alors effectivement modifier leur mot de passe immédiatement (et non plusieurs semaines plus tard). Mais si le site n’a pas détecté la fuite de données, alors tant que la faille ne sera pas corrigée, le pirate pourra recommencer son attaque et accéder au mot de passe modifié. Bref, dans les faits, cette règle a probablement un effet limité en termes de sécurité.
Forcer vos collaborateurs à utiliser un coffre-fort de mots de passe aura en revanche beaucoup plus d’effet positif sur la sécurité. En effet, l’utilisateur sera en mesure de définir un mot de passe aléatoire ce qui empêche le pirate d’extraire le mot de passe de sa version hashée (sauf si le site qui se fait pirater stocke le mot de passe en clair, mais là, ce n’est pas la faute de vos utilisateurs, c’est de la vôtre).
L’autre intérêt d’un coffre-fort de mots de passe est de permettre à l’utilisateur de ne jamais réutiliser ses mots de passe professionnels dans sa vie personnelle. Cette pratique induit pour le coup un risque assez élevé que l’utilisateur finisse par saisir son mot de passe sur un site très mal sécurisé et que le pirate parvienne à réutiliser ce mot de passe pour attaquer l’entreprise.
Imposer un changement de mots de passe régulièrement à vos collaborateurs, oui, mais commencez par imposer l’utilisation d’un coffre-fort de mots de passe !
4- Essayer d’empêcher les robots de remplir votre formulaire
Certains site tentent d’empêcher des robots de remplir les formulaires de mots de passe pour une ou plusieurs des raisons suivantes:
- Éviter les attaques par scripts automatiques
- Forcer l’utilisateur à saisir son mot de passe pour qu’il ne l’oublie pas
Certains sites empêchent également de copier-coller une valeur dans les formulaires de choix d’un nouveau mot de passe pour minimiser les chances peut-être que l’utilisateur ait mal saisi son premier mot de passe et se retrouve ensuite coincé.
Toutes ces raisons sont de mauvaises raisons car
- les attaques par script peuvent être bloquées au niveau du serveur, tout simplemnet par une temporisation après plus de 3 essais échoués pour le même utilisateur
- si l’utilisateur oublie son mot de passe ou l’a mal saisi, sauf cas spécifique, vous devez lui proposer un système de mot de passe oublié
Mais ce qui est le plus gênant, c’est que ces mécanismes anti-robot empêchent les coffres-fort de mot de passe de bien fonctionner lors du remplissage automatiquement les formulaires, ce qui est extrêmement frustrant pour les utilisateurs. En utilisant ces méthodes, vous rendez encore plus difficle l’adoption d’un coffre-fort de mots de passe et contribuez à rendre le web moins sûr.
Notre recommandation est donc au contraire de laisser les robots légitimes faire leur travail et d’adopter les bonnes pratiques suivantes :
- ne pas interdir le copier-coller dans un champ mot de passe
- ne pas refuser les événements javascript émis par les robots (ie ne pas refuser les événements ayant l’attribut “trusted“ à faux)
- utiliser systématiquement les attributs sémantiques “type“ et “autocomplete“ standards sur les champs input
<input type="text" autocomplete="username"/>
<input type="password" autocomplete="current-password"/>
<input type="password" autocomplete="new-password"/>
- déplacer les mécanismes anti-robots côté serveur
Conclusion
Pour résumer, les formulaires de mots de passe trop contraignants ou restrictifs sont une barrière à l’usage de coffres-forts de mots de passe qui sont pourtant indispensables pour accompagner durablement les utilisateurs vers les meilleures pratiques en termes de sécurité des mots de passe. Mieux le coffre-fort de mot de passe peut accomplir ses missions (remplissage automatique, génération de mots de passe forts…), plus la sécurité des mots de passe sera assurée et plus les utilisateurs seront satisfaits d’y prendre part, sans contraintes ni efforts considérables. À bon entendeur !