J'ai besoin de limiter les tentatives de connexion.
Une option consiste à compter les tentatives par adresse IP, puis à bloquer l'adresse IP. L'inconvénient est que différents utilisateurs peuvent avoir la même adresse IP. Une autre option est de limiter par un identifiant de compte (nom d'utilisateur ou email) puis de bloquer le compte (il peut être activé manuellement par le support). Le seul inconvénient auquel je peux penser est que les utilisateurs malveillants peuvent deviner les noms d'utilisateur et les bloquer ... Mais à part ça, cela semble plus sécurisé car les utilisateurs malveillants peuvent utiliser différentes IP, non?
Quelle est la méthode recommandée pour le faire?
Je dirais que vous devriez faire les deux.
Si vous ne limitez la limite que sur l'adresse IP, un attaquant contrôlant un réseau de robots pourrait forcer brutalement un compte avec un mot de passe faible. Si vous avez 10 000 ordinateurs avec des adresses IP uniques et que chacun a droit à quatre tentatives par heure, vous pouvez essayer près d'un million de mots de passe par jour.
Si vous ne notez que la limite du nom d'utilisateur, un attaquant avec une liste de noms d'utilisateur existants pourrait forcer les comptes avec un mot de passe faible. Il est probable que quelques-uns de vos utilisateurs utilisent l'un des 10 premiers mots de passe, donc si vous les essayez sur tous les comptes, vous entrerez quelque part.
Bien sûr, vous pouvez faire toutes sortes de combinaisons. Par exemple, vous pouvez bloquer un nom d'utilisateur uniquement lorsque X adresses IP différentes n'ont pas réussi à se connecter avec lui, de sorte qu'un attaquant essayant d'empêcher un utilisateur de se connecter doit travailler un peu pour cela.
Modèle de menace
Cela dépend vraiment de votre modèle de menace:
Exemples
Prenons ebay comme exemple:
Ainsi, dans cet exemple - l'accès à l'application est quelque peu critique, et un attaquant n'attaque pas des comptes d'utilisateurs spécifiques -, la limitation par IP serait la bonne décision, et la limitation par nom d'utilisateur serait préjudiciable.
Prenons un autre exemple: une connexion administrateur pour une application Web:
Donc, ici, le blocage par IP a un faible effet sur l'attaquant, tandis que le blocage par nom d'utilisateur serait le bon choix.
Vous devriez limiter les deux taux.
Donner à un compte des tentatives de connexion limitées (à partir de toutes les adresses IP) est assez standard et arrêtera une tentative de deviner le mot de passe d'un utilisateur.
Vous devez également limiter la limite de chaque adresse IP contre les tentatives de connexion incorrectes pour tous les comptes tentés, afin qu'ils ne puissent pas maximiser un compte et essayer contre un autre encore et encore.
Bien sûr, cela s'ajoute à la limitation de demande anti-DDoS standard.