Verrouiller les utilisateurs après un trop grand nombre d'échecs de tentatives de connexion
Je suis à la recherche pour le plus manière élégante de verrouiller un Django compte d'utilisateur après plusieurs tentatives infructueuses de connexion.
"Qu'ai-je essayé?":
J'ai cherché, sans succès, pour des questions semblables sur (Si cette question est un dup s'il vous plaît, postez un commentaire à supprimer celui-ci).
À l'instant, je suis à la recherche d'autres développeurs, des expériences. Je préfère ne pas parler de ce que j'ai essayé dans l'ordre à condition de ne pas les réponses.
De l'information supplémentaire, l'application n'a pas UserProfile activé (mais, bien sûr, je peux l'activer si ça vaut le coup).
Verrouillage de la utilisateurs sur la base de tentatives infructueuses de connexion est mauvaise conception, à mon avis. Un tiers malveillant pourrait intentionnellement continuer à insister sur le sait (ou devrait) des comptes, le verrouillage, le réel de l'utilisateur. Le blocage (ou peut-être l'enfer de blocage), basé sur l'IP ou serait préférable. Si vous ne souhaitez que plus de sécurité, peut-être un mélange des deux, mais où le bloc se produit après moins de tentatives.
N'est-ce pas le point entier que vous êtes le verrouillage d'un compte à l'encontre d'un utilisateur non authentifié? Un inconvénient mineur est beaucoup mieux que d'un compte compromis, non?
Qu'est-ce que "l'enfer de blocage"?
forgé à partir de l'enfer à l'interdiction ou à l'ombre-interdiction: blog.codinghorror.com/suspension-ban-or-hellban la mise en Œuvre d'un système qu'après X connexions échouées à partir d'une IP, il répond en apparence-par la voie normale (de l'échec), mais n'a pas vraiment d'essayer à tout.
N'est-ce pas le point entier que vous êtes le verrouillage d'un compte à l'encontre d'un utilisateur non authentifié? Un inconvénient mineur est beaucoup mieux que d'un compte compromis, non?
Qu'est-ce que "l'enfer de blocage"?
forgé à partir de l'enfer à l'interdiction ou à l'ombre-interdiction: blog.codinghorror.com/suspension-ban-or-hellban la mise en Œuvre d'un système qu'après X connexions échouées à partir d'une IP, il répond en apparence-par la voie normale (de l'échec), mais n'a pas vraiment d'essayer à tout.
OriginalL'auteur dani herrera | 2012-01-27
Vous devez vous connecter pour publier un commentaire.
Prendre un coup d'oeil à django-axes ou django-brutebuster
crée une instance du modèle pour chaque tentative de connexion a échoué et les enregistrements de nom d'utilisateur. Donc, je pense que c'est plutôt élégant pour ajouter
post_save
signal de ce modèle, et le verrouillage de l'utilisateur (une seule ligne de code). J'ai essayé de django-brutebuster juste pour l'enregistrement, mais pas dans la production (n'en avait pas besoin).laissez-moi un peu de temps pour les délibérations 😉
Je pense que django-brutebuster + post_save signal est le plus proche de réponse à ma question. Aussi, django-blocage est un bel outil, et utile pour prévenir bruteforce, mais j'ai besoin de verrouillage de compte d'utilisateur de façon permanente, non seulement de manière temporaire afin de se conformer aux lois locales.
OriginalL'auteur DrTyrsa
Nous avons utilisé django-verrouillage et il a vraiment bien travaillé
Uniquement le Cache. Il est logique de réduire la charge (sans supplément de requêtes DB) lorsque des abrutis tentent de bruteforce votre système 😉
OriginalL'auteur Michael Samoylov
Une solution simple serait de créer une variable dans le Profil de l'Utilisateur qui est initialement à 0 et augmente de 1 à chaque fois que l'utilisateur essaie sans succès de la connexion. Si cette variable atteint un certain seuil(qui est vérifié à chaque fois que l'utilisateur essaie d'ouvrir une session), le compte d'utilisateur peut être suspendu. Bien sûr, lorsque l'utilisateur n'a réussi à la connexion, la variable doit être définie à 0.
À côté de l'indicateur par @kioopi une solution qui n'a pas besoin de toucher la base de données serait sans doute préférable.
OriginalL'auteur jörg
La création de modèle appelé "failed_logins" avec deux champs, un "Utilisateur" champ/clé étrangère et un champs "Timestamp".
Lorsqu'un utilisateur se connecte avec succès dans, de supprimer tous les "failed_logins" entrées de l'utilisateur.
Lorsqu'un utilisateur sans succès, journaux, créer une entrée dans "failed_logins" pour que l'utilisateur avec le timestamp actuel.
Sur chaque tentative de connexion pour un utilisateur donné, AVANT de vérifier pour voir si le mot de passe est correct/incorrect:
l'exécution d'une requête suppression de tous les "failed_logins" entrées de plus de 15 minutes (ou w/e période de temps).
exécutez une requête de vérifier le nombre d'entrées dans failed_logins pour l'utilisateur qui tente de se connecter. Si c'est 5, tuer la tentative de connexion, pour avertir l'utilisateur qu'ils ont été en lock-out de leur compte et de tenter de retour dans peu de temps.
Résultat:
Les utilisateurs sont verrouillés après 5 tentatives infructueuses de connexion pour une courte durée.
OriginalL'auteur emeth
Vous pouvez essayer cet extrait:
mysql_*
fonctions sont plus pris en charge ou maintenus. Ils ont été déconseillée en PHP 5.5.0 et supprimé en PHP 7.0.0. Vous êtes fortement encouragés à migrer vers MySQLi ou PDO_MySQL.Attention: Votre code est vulnérable à les attaques par injection SQL. Merci de lire ce post pour en savoir plus sur la façon de le prévenir.
OriginalL'auteur Gayathri