Intégration de « Have I Been Pwned » dans le validateur de Laravel

Jeudi 29 avril

Il y a quelques jours, Nuno Maduro a annoncé l’ajout prochain, dans Laravel, de nouvelles règles de validation de données consacrées aux mots de passe.

En guise d’illustration, il a posté ceci :

Assez logiquement, il s’est rapidement fait allumer : exiger que le mot de passe comporte une lettre, un chiffre, une lettre capitale, des « caractères spéciaux »,… tout cela est considéré comme un ensemble de très mauvaises pratiques, qui mènent à la création de mots de passe simplistes (pour en faciliter la mémorisation) et, souvent, réutilisés d’un site à l’autre.

Ceci est par ailleurs fort bien résumé par l’un des xkcd les plus connus.

On peut facilement imaginer qu’introduire de telles règles de validation dans Laravel (qui est devenu, depuis maintenant un bon moment, le framework PHP le plus répandu) va mécaniquement favoriser leur usage, et que cela sera même probablement perçu comme quelque chose d’encouragé. Heureusement, les effets négatifs potentiels de ce très mauvais signal seront amoindris par le fait que, par défaut, Laravel incite à hasher tous les mots de passe avec Bcrypt, ce qui devrait limiter les dégâts.

La dernière ligne de cet exemple est, par contre, beaucoup plus intéressante. Quand j’ai vu ça, j’ai tout de suite pensé à une intégration de Have I Been Pwned (HIBP) et, de fait, l’implémentation m’a donné raison. Ce site lancé fin 2013 par Troy Hunt rassemble des dumps de violations massives de données et permet notamment à quiconque de vérifier, via un simple champ de recherche, si son adresse e-mail ou son numéro de téléphone a fuité dans la nature. HIBP est par ailleurs intégré au gestionnaire de mots de passe 1Password depuis 2018 (via la fonction « Watchtower »).

L’intégration (techniquement assez simple) dans Laravel permettra donc, lors d’une validation de données, d’interroger l’API de HIBP pour vérifier si le mot de passe saisi existe dans son énorme base de données.