Question

Je songe à créer un système de connexion pour Ruby on Rails, un peu comme celui-ci

http://visionmasterdesigns.com/ tutoriel-créer-un-login-système-en-ruby-on-rails /

En termes de sécurité, devrais-je limiter les tentatives qu'un utilisateur peut avoir à se connecter s'il se trompe de nom d'utilisateur?

De plus, les étapes de base des connexions semblent être:

  • authentification du nom d'utilisateur et du mot de passe par rapport à ceux de la base de données
  • si un nom d'utilisateur et un mot de passe authentiques sont créés, créez une variable de session
  • avant le filtre afin que les pages nécessitant une connexion soient protégées.

Y at-il autre chose que je devrais envisager?

Était-ce utile?

La solution

Oui, limiter le nombre de tentatives de connexion par IP (pas par session) augmente la sécurité.

Savez-vous qu'il existe déjà plusieurs systèmes d'authentification avec Rails? Inutile de réinventer la roue.
Voici une liste non exhaustive.

Si vous ne souhaitez pas en utiliser, vous pouvez prendre exemple sur ce qu'ils font.

Modifier 2013
Les bibliothèques fournies ci-dessus ne sont plus à jour et je ne saurais vous recommander de les utiliser dans une nouvelle application. Consultez le schéma .

Autres conseils

Tout d’abord, limitez la page de connexion par adresse IP. Utilisez un système de captcha invisible sur la page de connexion. Vous devez ensuite définir des limites de connexion par adresse IP, mais vous devez également définir des limites de connexion par utilisateur en dernier recours pour empêcher les réseaux de zombies de forcer brutalement plusieurs adresses IP. Envoyez un courrier électronique à l'utilisateur si une tentative de forcer brutalement son mot de passe est détectée. N'envoyez pas des hordes d'e-mails répétés si quelqu'un essaie d'utiliser plusieurs adresses IP. Un botnet pourrait faire du spam sérieux sinon, et pire encore, faire passer un message important dans le dossier spam. Assurez-vous de mentionner qu'ils pourraient vouloir changer leur mot de passe et / ou en améliorer la puissance.

Si vous définissez des limites de connexion IP, augmentez les limites. Beaucoup d'endroits utilisent trois grèves et vous êtes absent. C'est fou et peu convivial. Il devrait être au moins dix ou plus réaliste, et lorsque vous le frappez, vous devriez obtenir une interdiction basée sur le temps plutôt que "Appeler le service clientèle". interdire. Personne ne va forcer un mot de passe en dix tentatives. Je recommande donc une limite de connexion par IP de 10 et une limite de connexion par utilisateur comprise entre 1 000 et 10 000 (assez élevée pour contrecarrer les attaques par déni de service, mais suffisamment basse pour qu'un botnet n'ait pas encore réussi à déchiffrer le mot de passe). . Vous devriez avoir une forme d’alerte au téléavertisseur sysadmin / sur appel qu’un réseau de zombies au travail se déclenche bien avant que vous n’atteigniez ce seuil. (Conservez le nombre de connexions échouées pour tous les utilisateurs et les utilisateurs individuels, effectuez une moyenne mobile et alertez-le s'il dépasse l'un des seuils. N'oubliez pas que si une liste d'utilisateurs est suffisamment longue, la probabilité de succès pour au moins un compte sur l'ensemble du compte base d'utilisateurs est à peu près la même chose que la probabilité de réussir en attaquant un seul compte.)

Bloquez les attaquants évidents au niveau du pare-feu. Expirer les interdictions après un certain temps. Assurez-vous que le support client libère quelqu'un, mais assurez-vous que l'interdiction est liée à l'infraction. Vous ne devriez pas annuler la connexion de quelqu'un qui a tenté de casser vingt noms d'utilisateur ou quelque chose de différent. Jugement ici, bien sûr, car les gamins de script avec des membres de la famille non responsables et des mamies qui ont été prises en charge par des réseaux de zombies peuvent certainement réussir à se faire interdire leur propriété intellectuelle.

Si vous avez réellement le temps de faire tout cela, vous aurez un formulaire de connexion de premier ordre. Je doute que vous ayez besoin de cela.

Une autre façon de le faire consiste à utiliser un rack. Vous pouvez suivre le nombre de fois où une adresse IP visite la page de connexion pendant un certain temps, stockant les tentatives de connexion sur la base de données, sur le serveur, etc. quota pour un intervalle de temps défini.

Damien a suggéré Authlogic. Authlogic est mon système d'authentification préféré pour Rails. C'est très complet et adaptable. Authlogic ne manque pas de modules, et je suis certain que vous pourriez en tirer parti pour que Authlogic fonctionne à votre place.

L’attaque par déni de service devrait également être prise en compte. En limitant le nombre de requêtes aux pages dynamiques à un taux raisonnable , il devrait être plus difficile pour un utilisateur malveillant de supprimer votre site. Cela contribuera également à empêcher les utilisateurs de manipuler les données du site de manière inattendue, ce qui pourrait poser un risque pour la sécurité (peut-être par la corruption des données).

Si vous décidez d'utiliser cette approche, vous devriez essayer de trouver un module bien supporté pour vous aider (plutôt que de lancer le vôtre).

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