De quoi nous protégeons-nous?
Tout d'abord, il faut se demander contre quoi ils protègent exactement. Dans ce cas, il existe deux menaces différentes:
- Menace 1 Un attaquant force des e-mails aléatoires pour trouver des e-mails enregistrés valides. Cela pourrait théoriquement être utilisé pour créer des listes de spam, mais pour autant que je sache, cela n'a jamais été fait car il est plus simple d'envoyer les e-mails que de passer par le problème supplémentaire (Le nombre de fois où j'ai reçu des e-mails de spam réclamant mon [certains États-Unis compte bancaire] une action nécessaire même si vous ne résidez pas aux États-Unis est innombrable).
- Menace 2 Un attaquant cible un utilisateur spécifique ou une liste d'utilisateurs spécifiques. Ceci est particulièrement important lorsque le simple fait qu'une personne est enregistrée quelque part peut avoir des conséquences. Exemple: le simple fait d'avoir un compte sur Grindr ou Ashley Madison peut être dangereux dans certaines communautés.
Vue d'ensemble
La prochaine question à laquelle il faut réfléchir est de savoir: d'autres endroits pourraient exposer les mêmes informations et les considérer dans leur ensemble. En règle générale, le formulaire d'inscription informera l'utilisateur si l'e-mail saisi est déjà enregistré, mais bien sûr cela ne s'applique pas à la plupart des logiciels B2B. Au-delà de ces fonctionnalités de `` partage avec l'utilisateur '' (une zone de saisie dans laquelle un e-mail peut être saisi pour partager un objet avec cet utilisateur) exposera souvent également ces informations, mais comme elles sont rares, je ne les inclurai pas dans cette réponse.
Solutions pour un système avec enregistrement public
Tout d'abord il est bon de reconnaître que ne pas informer l'utilisateur qu'un compte existe déjà pendant le processus d'inscription est d'un point de vue UX très désagréable. Il en va de même pour les formulaires de réinitialisation de mot de passe qui échouent silencieusement 1 lorsque l'utilisateur fait une faute de frappe ou reçoit plusieurs e-mails. Cela ne veut pas dire que c'est quelque chose qu'il ne faut pas faire, mais il faut le mettre en balance avec les risques et les avantages pour la sécurité.
Dans un système avec enregistrement public, il est important de prendre en compte l'ampleur de la menace 2 pour les utilisateurs de votre produit. Compte tenu du risque même modeste, il peut être prudent de modifier le formulaire d'inscription pour commencer en entrant uniquement un nom et un e-mail, en envoyant un message «Vérifiez votre e-mail pour continuer à vous inscrire», et si l'e-mail est déjà enregistré, envoyer un e-mail à l'utilisateur. eux de cela. De même, dans ce cas, le formulaire de réinitialisation du mot de passe n'informera en aucune manière l'utilisateur si l'e-mail est valide.
D'un autre côté, si la menace 2 est minime, nous devons nous limiter exclusivement à la menace 1 . Bien sûr, l'approche précédente fonctionnera également parfaitement contre la menace 1 exclusivement, mais compte tenu du coût UX, il vaut la peine d'envisager d'autres solutions. La solution la plus évidente est la limitation de débit 2 à la fois pour les vérifications «e-mail existe» et «mot de passe oublié» (techniquement, ces appels peuvent même aller au même point de terminaison d'API). Ceux-ci seront souvent conçus pour être assez indulgents pour les 10 premiers appels environ, mais seront très limités très rapidement après ce point.
Important : ne supprimez jamais les messages d'erreur du mot de passe enregistrement sans également implémenter des restrictions similaires sur le formulaire d'inscription.
Solutions pour un système sans enregistrement public
Tout se résume aux mêmes problèmes que ci-dessus (et j'aurais dû écrire ceci en premier ), mais sans le coût `` supplémentaire '' du hit pour l'enregistrement UX, il est relativement `` moins cher '' d'avoir un formulaire d'oubli de mot de passe sécurisé, même si bien sûr c'est toujours désagréable pour les utilisateurs et vous pouvez toujours déterminer si la limitation du débit n'est pas suffisante pour votre modèle de menace spécifique.
Remarques
1: Au lieu d'échouer silencieusement, il est sage d'envoyer au moins un e-mail à l'e-mail saisi pour l'informer que son e-mail n'a pas été trouvé. Cela 1) empêche les attaquants d'abuser en masse du système (comme on le remarquera) et 2) empêche les utilisateurs de se demander pourquoi ils ne reçoivent pas d'e-mail.
2: Do notez que la limitation de débit peut affecter négativement les utilisateurs de grands réseaux ou VPN. Considérez toujours à quel point ce public est important pour vous et, en fonction de cela, passez un temps suffisant pour vous assurer que l'application reste fonctionnelle même lorsque la limitation de débit est la plus sévère (par exemple en abaissant la limite de débit en résolvant un captcha ou en définissant la limite de débit maximale à environ une fois par minute et en s'assurant que l'application attendra toute la minute (note: ce sera toujours désagréable étant donné qu'une équipe d'utilisateurs s'inscrivant au même service au début de la même réunion)).