Aller au contenu
Tutorial

Vérifiez les e-mails violés lors de l'inscription sans exécuter HaveIBeenPwned vous-même

| 6 min read

Récupérez les informations d’identification compromises avant de les stocker. Un seul appel API, un gestionnaire de route Next.js et un validateur React Hook Form qui ajoute 40 ms à la latence d'inscription.

Login form on a screen representing signup flow and breach checks
Photo by Markus Spiske on Unsplash

Un utilisateur connu saisit son mot de passe préféré dans votre formulaire d'inscription. Ce mot de passe a été divulgué lors du vidage AT&T de 2024, de la violation 23andMe de 2023 et d'une extraction du coffre-fort LastPass de 2022. Vous stockez le hachage, vous félicitez pour bcrypt, et trois semaines plus tard, un robot de bourrage d'informations d'identification entre dans le compte depuis un proxy résidentiel au Brésil.

La solution est bon marché. Un appel API lors de l’inscription vous indique si l’e-mail apparaît dans les corpus de violations connues. Utilisez ce signal pour forcer l’authentification MFA, exiger un mot de passe plus fort ou déposer l’inscription dans une file d’attente de révision. Cet article montre le point de terminaison, un gestionnaire de route Next.js et un validateur React Hook Form qui ajoute environ 40 ms à votre latence d'inscription.

Pourquoi vérifier les violations lors de l'inscription, pas plus tard

Le credential stuffing fonctionne car 65 % des utilisateurs réutilisent leurs mots de passe sur plusieurs sites (Google/Harris 2019, reproduit dans l’enquête Bitwarden de 2023). Un e-mail lié à 14 violations antérieures n’est pas un échantillon aléatoire d’Internet ; il s'agit d'un utilisateur qui a transmis le même mot de passe à 14 fournisseurs différents. La probabilité marginale qu’ils aient tapé la même chose dans votre formulaire est élevée.

L'enregistrement lors de l'inscription vous coûte un aller-retour. Vérifier après une prise de contrôle vous coûte un ticket d'assistance, un remboursement, un examen de confiance et de sécurité et souvent une notification de violation du RGPD. Vous voulez le signal avant que le mot de passe n'arrive dans votre table utilisateur, pas après.

Un appel API, deux signaux

POST /v1/breach/check accepte soit un email, soit un mot de passe. Voici l'appel par e-mail.

Et un exemple de réponse pour une adresse qui apparaît dans trois corpus.

Deux choses qui méritent d’être soulignées. breach_count et le breaches le tableau vous donne les noms des ensembles de données, les dates et le nombre total d'enregistrements ; ils ne renvoient pas le mot de passe exposé, l'enregistrement complet divulgué ou toute information personnelle au-delà de ce que vous avez envoyé. password_exposed n'est renseigné que lorsque vous passez un password champ dans le corps de la demande. Pour l'inscription, l'e-mail seul suffit à hiérarchiser les risques.

L'API k-anonymity de HaveIBeenPwned est gratuite pour un usage personnel et excellente pour la recherche de préfixes de mot de passe. À l'échelle de la production, vous payez 3,50 $/mois par clé et maintenez la gestion du préfixe SHA-1 ainsi que les limites de débit côté client. Le point de terminaison botoi enveloppe cette plomberie et ajoute une mise en cache périphérique, une authentification unifiée avec le reste de l'API et une facture unique.

Gestionnaire de route Next.js

Placez l'appel derrière votre propre itinéraire afin que la clé API reste sur le serveur. Validez l'entrée avec Zod, ajoutez un délai d'attente AbortController de 300 ms et échouez l'ouverture en cas d'erreurs en amont afin qu'une vérification lente des violations ne bloque jamais une véritable inscription.

Quelques choix de conception qui méritent d’être mentionnés. Le délai d'attente est serré (300 ms) car la réponse du P95 est de 120 ms et tout ce qui est plus lent est un transitoire ; la branche fail-open revient risk: 'low' donc un tiers floconneux ne peut pas supprimer votre formulaire d'inscription. Le tier() la fonction est le seul endroit où la politique de risque vit, ce qui rend difficile de la réajuster plus tard.

Validateur de formulaire React Hook côté client

Anti-rebond de 500 ms afin de ne pas lancer de requête à chaque frappe. Ne bloquez pas le bouton de soumission sur le résultat ; afficher un avertissement et pré-activer MFA à la place. Conversion des avertissements ; les blocs durs vous font perdre l'utilisateur.

Câblez le crochet dans un composant React Hook Form. Le watch L'appel envoie l'e-mail dans le hook et le résultat pré-vérifie la case MFA pour les adresses violées.

Que faire du résultat

Traduisez le nombre de violations dans une politique. Commencez avec ce tableau et réglez-le une fois que vous avez deux semaines d'inscriptions derrière le score.

Nombre de violations Action UX Pourquoi
0 Procéder Aucun changement Aucune preuve publique d’un compromis préalable ; chemin par défaut.
1-3 MFA rapide Pré-cochez la case MFA, affichez un avertissement logiciel Un mot de passe réutilisé par violation est courant ; inciter l’utilisateur à protéger le nouveau compte.
4-10 Forcer MFA + mot de passe fort Exiger une inscription TOTP avant la première connexion, minimum 14 caractères Une exposition répétée suggère que l’e-mail figure dans toutes les principales listes d’informations d’identification ; un mot de passe faible ici est une prise de contrôle en attente.
10+ Bloc souple avec friction Ajoutez un captcha ou envoyez-le en révision manuelle Cet e-mail est effectivement public. Augmentez le coût de l'attaquant avant de créer un compte sur celui-ci.

Empilez-le avec deux contrôles supplémentaires pendant moins de 120 ms

Le contrôle des violations détecte à lui seul le risque de mot de passe réutilisé. Associez-le à /v1/disposable-email/check pour signaler les domaines tempmail et /v1/vpn-detect pour signaler les adresses IP du centre de données ou de la source Tor, et vous disposez d'une carte de score à trois signaux qui s'exécute en parallèle sous 120 ms au P95. Le modèle de notation complet (pondérations, seuils, journalisation d'audit) réside dans Arrêtez la fraude à l'inscription avec 3 vérifications API.

Obtenez une clé API gratuite sur botoi.com/api/signup. Le niveau gratuit couvre 1 000 vérifications de violation par jour (rafale de 5 requêtes/min), suffisamment pour un petit SaaS ou pour rejouer vos 30 derniers jours d'inscription via le point de terminaison et calibrer les niveaux ci-dessus contre le désabonnement et les abus de données.

Référence complète du point final : API de vérification des violations.

FAQ

Est-ce que cela divulgue des adresses e-mail à Botoi ?
L'e-mail atteint l'API via TLS et est utilisé uniquement pour calculer la correspondance de violation. Les corps de requête ne sont pas conservés dans les journaux d’accès ; seuls la méthode, le chemin, le statut et la latence sont conservés pendant 30 jours. Consultez la documentation de l'API pour connaître l'instruction complète de gestion des données.
Quelle est la latence typique ?
Le temps de réponse médian est de 40 ms à partir d'un nœud périphérique Cloudflare Workers, 120 ms au 95e centile. Le gestionnaire de cet article définit un délai d'expiration AbortController de 300 ms afin qu'un appel lent ne puisse pas bloquer votre formulaire d'inscription.
Dans quelle mesure l’ensemble de données sur les violations est-il récent ?
L'ensemble de données est synchronisé chaque semaine à partir des vidages publics (violations suivies par HIBP, listes de bourrage d'informations d'identification et collections n°1 à n°5). Les nouveaux corpus apparaissent dans les 7 jours suivant leur divulgation publique.
Puis-je vérifier les mots de passe directement ?
Oui. POSTez un préfixe SHA-1 (les 5 premiers caractères hexadécimaux) ou le mot de passe en texte brut sur le même point de terminaison. Le formulaire de préfixe est plus sûr pour les appelants côté client car le hachage complet ne quitte jamais le navigateur. Utilisez uniquement le texte brut de votre serveur.
Est-ce conforme au RGPD ?
Le contrôle des violations est une mesure de sécurité au sens de l'article 32 du RGPD (sécurité du traitement). Documentez le chèque dans vos registres des activités de traitement, indiquez botoi comme sous-traitant dans votre DPA et notez la base légale (intérêt légitime à empêcher le piratage du compte).

Commencez a construire avec botoi

150+ endpoints API pour la recherche, le traitement de texte, la generation d'images et les utilitaires pour developpeurs. Offre gratuite, sans carte bancaire.