Image illustrant Vos utilisateurs ne sont pas votre sécurité

Vos utilisateurs ne sont pas votre sécurité

Forcer votre utilisateur à faire fonctionner son ingéniosité au service de la création d’un mot de passe est un mauvais parti pris sur votre sécurité et l’utilisation de votre service.
Je constate de plus en plus souvent cette tendance à demander des mots de passe compliqués et l’article de Rémy sur "La sécurité passe aussi par la qualité" me donne envie d’aller un peu plus loin.

Récemment, Godaddy et le Boamp [1] se sont particulièrement illustrés en me demandant des mots de passe de longueur extrême, composés de majuscules, minuscules, chiffres et caractères spéciaux (c’est quoi un caractère spécial ?).

C’est inutile

Faire reposer sa sécurité sur la complexité du mot de passe de votre utilisateur est inutile dès lors que vous stockez le mot de passe en clair dans votre base de données. Ce ne sont clairement pas les exemples qui manquent comme le relève ce Tumblr Plain Text Offenders.

Si ce n’est pas votre cas, bravo : vous faites partie du bon grain.
Cependant une fois haché et salé (ça donne faim) le mot de passe dérangera grandement le pirate qui s’est introduit malicieusement dans votre base de données : que le mot de passe fasse 3 caractères ou 1337.

Et les mots (de) passe-partout

Les mots de passe bateau ou trop simples sont le plus souvent découvert par des attaques par dictionnaire. Attaques qui consistent à prendre tous les mots d’un "dictionnaire" et de les tester les uns après les autres sur un compte.

Ces attaques reposent sur des milliers de requêtes envoyées à votre site. Requêtes qui, si elles ne le font pas "tomber", sont pour le moins détectables et il est possible de les prévenir (même pour Wordpress). Par exemple vous pouvez ajouter du délais entre deux tentatives ratées voire même bloquer votre utilisateur au bout de 5 tentatives ratées.

Dans cette situation, la complexité du mot de passe ne vous offre qu’un temps de répit : celui durant lequel vos attaquants vont agrandir leurs dictionnaires (certes ça vous laisse du temps mais quand même).

Ça vous coûte de l’argent

C’est ce qu’on a le plus tendance à oublier : un mot de passe oublié ça coûte car il faut envoyer le mail, gérer l’expiration du code de remise à zéro, etc. Tout cela a un prix en terme de développement mais aussi en infrastructure.

Prenez par exemple l’envoi de 1000 remises à zéro de mot de passe sur un site ayant un poids de page moyen de 350 kb et une vingtaine d’appels HTTP par page (je reste sobre). Cela nous donne :

  • 3 Gigabytes de bande passante
  • 160.000 requêtes HTTP
  • 5.000 à 8.000 pages vues [2]
  • 2000 emails envoyés [3]

Je vous laisse calculer le coût de cet exemple (extrême certes).

L’utilisateur ne contrôle pas ses informations

Le pire dans cette histoire c’est qu’à aucun moment, avant que je ne remplisse ces champs, je n’ai été averti que ma saisie devait contenir x ou y caractères. Cela ne fait que rajouter de la frustration lorsque je soumets mon formulaire (bien trop long) et que j’ai une erreur (Godaddy affiche une info-bulle lorsque le focus quitte le champ, accessibilité à la trappe).

Mais surtout, que faut-il penser d’un service qui a si peu confiance dans sa sécurité qu’il vous demande des mots de passe infernaux ?


Notes de l'article

[1Bulletin Officiel des Annonces des Marchés Publics

[2De une à trois pour les tentative de login, une pour le formulaire de demande de remise à zéro, une pour la soumission du formulaire, une pour le formulaire de remise à zéro, une pour la soumission du formulaire.

[3Envoi du lien d’activation, envoi de la confirmation de changement de mot de passe.