Meilleure méthode pour bloquer les demandes de connexion répétées sans base de données?

StackOverflow https://stackoverflow.com/questions/1001963

  •  05-07-2019
  •  | 
  •  

Question

J'essaie d'écrire une fonction améliorée de réinitialisation du mot de passe pour l'un de nos sites Web publics et, en plus d'un meilleur captcha, je voulais signaler un nom d'utilisateur qui tente de se connecter sans succès x nombre de fois en moins de y minutes . La première chose à faire était de créer une base de données qui enregistre chaque tentative, puis après le nombre maximal de tentatives dans le temps - nous verrons simplement le compte jusqu'à ce qu'un appel téléphonique soit reçu du responsable de l'employé pour le réinitialiser.

Quelle est la meilleure approche qui ne nécessite pas de persistance via SQL. (Cookie / autre chose?) S'il n'en existe pas, comment puis-je le faire avec une approche plus propre? pour une raison quelconque, mon cerveau est plein aujourd'hui

Était-ce utile?

La solution

Cochez cette réponse à propos de les étrangler.
Limiter le nombre de tentatives de connexion

Jeff Atwood a publié un blog intéressant sur le sujet au cas où vous seriez curieux.
http://www.codinghorror.com/blog/archives/001206.html

Les stocker dans une base de données peut devenir fastidieux et vous finirez par vous inquiéter d'inonder votre table de tentatives de connexion infructueuses. En outre, il est également délicat de stocker quelque chose sur la machine de l'utilisateur qui contrôle ceci. En effet, ils contrôlent tous les fichiers de leur ordinateur et risquent de réinitialiser votre compteur de connexion en échec ou, pire, de vous renvoyer des données erronées / malveillantes.

Autres conseils

L'utilisation de cookies ou de sessions serait une mauvaise chose, puisqu'un utilisateur pourrait effacer ses tentatives de connexion en effaçant simplement les cookies. Peut-être qu’utiliser un fichier dans un répertoire temporaire pour stocker les tentatives de connexion serait approprié?

Eh bien, un cookie n'est pas utile contre un attaquant (il va simplement l'enlever ou ne vous l'envoyer pas). Si vous avez un état d'application en mémoire, vous pourrez peut-être l'utiliser, mais vous devrez faire très attention, car vous risqueriez de saturer votre mémoire très rapidement, en plus de vous heurter à des problèmes d'évolutivité dus à la simultanéité et verrouillage. Et même cela pourrait ne pas fonctionner sur une application qui s'exécute sur plusieurs serveurs, car l'état de cette application n'est probablement pas partagé entre ces serveurs. Pourquoi pensez-vous que stocker des données dans la base de données est une mauvaise idée?

Vous pouvez utiliser une base de données, utiliser memcache et configurer un travail cron pour vider la table périodiquement. Vous pouvez également utiliser des cookies ou des variables de session, mais je ne les utiliserais pas pour des raisons de sécurité.

Sachez que l'objectif d'un cracker n'est peut-être pas d'accéder à votre système, mais de le rendre inutilisable pour tout le monde. Il pourrait peut-être atteindre cet objectif en se connectant volontairement avec de fausses informations d'identification pour bloquer certains utilisateurs de votre site! Je pense que vous ne trouverez pas de solution adéquate sans base de données.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top