C'est donc essentiellement une assurance que je fais tout le processus d'enregistrement / de connexion jusqu'à la hausse / la salage va.
J'ai une table d'utilisateurs avec le mot de passe, le sel, le jeton (évidemment, il y en a d'autres Mais c'est le plus important). Lors de l'enregistrement, il génère un sel aléatoire et un jeton aléatoire, et il met dans le champ de mot de passe ceci: p> ce sel et jeton généré aléatoires sont stockés dans leurs champs respectifs de Les utilisateurs rangées dans la table. p> Donc, lors de la connexion, je sélectionne le sel uniquement de la ligne d'utilisateurs avec le nom d'utilisateur qu'ils ont spécifié. Je fais ensuite une question de comptage du nombre de lignes que leur mot de passe postal a concaténé avec leur sel spécifique, puis je les enregistre. À peu près sûr, j'ai cette partie vers le bas. P> Maintenant, je pensais valider leur login Sur chaque page, je aurais une fonction a manifesté chaque page qui vérifie leur cookie pour voir si le format d'ID-Usename-Jetken correspond à la ligne de la base de données. Signification que chaque login il définit son cookie avec ces informations d'identification. P> La seule chose que je peux penser à le rendre meilleur est de changer le jeton tous les login valides? P> Merci pour les mecs Insight. P> P>
3 Réponses :
Vérifie leur cookie pour voir si le format d'ID-USERNAME-Nom-Token correspond à la ligne de la base de données p> blockQuote>
Vous pourriez, mais cela est plutôt cher et vous ne répondez pas au problème de la gestion de la session - la définition d'un temps d'expiration de cookie dans le passé ne provoque pas toujours que les cookies seront supprimés. Par tous les moyens, considérez ceci pour un type de fonction de souvenir de moi (mais utilisez un chemin décalé pour éviter de présenter le cookie à chaque fois). P>
Vous n'avez rien gagné de stocker le nom d'utilisateur authentifié dans la session. Mais modifiez l'ID de la session lorsque vous authentifiez un utilisateur et utilisez SSL pour les jetons d'authentification de passage. P>
Oui, vous devriez certainement changer les jetons avec chaque connexion. Sinon, un jeton volé une fois un compte volé pour toujours. Les utilisateurs s'attendent à ce que l'enregistrement de la déconnexion sécurise leur session d'attaque en invalidant leurs cookies ou d'autres données. P>
plutôt que le jeton étant aléatoire, vous pouvez le faire servir de signature, en le générant d'un hachage de l'ID utilisateur, heure d'expiration de la session, et tout ce que vous voulez dans le cookie, plus un sel (tout comme le Système de connexion). Ce sel n'a pas à provenir de la base de données, mais cela peut. Il pourrait s'agir d'une corde codée (parfois appelée «poivre», je pense). N'oubliez pas de traiter le cookie comme invalide s'il est passé à l'expiration. C'est pourquoi le jeton devrait être une signature, pour s'assurer qu'ils ne parsaient pas que les données. P>
Je suis en désaccord avec le jeton étant une signature. Vous avez besoin que le jeton soit impropre et le seul moyen de garantir que c'est au hasard. Par tous signifie avoir une signature aussi, mais un jeton aléatoire est très important.
semble assez bon pour moi, mais vous devez être conscient d'un couple de choses:
Pour rendre votre base de données de mot de passe résistant aux attaques de force brute, vous pouvez itérer le hachage: p> Deuxièmement, assurez-vous d'utiliser SSL tout le temps. Sans cela, c'est assez trivial pour un attaquant de voler le cookie de connexion. Voir pamesheep pour un bon exemple de la manière dont il est trivial. P> modifier définitivement le jeton de chaque connexion et envisagez de le modifier pour chaque demande de prévention de la fixation de la session et de rejouer les attaques. P> Vous pouvez aussi Sélectionnez le sel et le hachage de la base de données et effectuez le côté serveur de comparaison de hachage (plutôt que sur la base de données) pour réduire le nombre de voyages ronds à la base de données. P> Je suggérerais que le jeton être entièrement aléatoire. Vous voulez qu'il soit dégustable et le meilleur moyen de le faire est aléatoire. Vous êtes STRUT> [SHART> ATTENDER LE JETENCE À UNE ADRESSE IP particulière également, mais cela devrait être en plus d'un jeton aléatoire, pas un remplacement. P> C'est tout ce qui me tient à l'esprit. Bon sur vous pour avoir demandé conseil plutôt que simplement MD5 - ing du mot de passe et le coller dans la base de données! P> p>
Je voudrais que le jeton dépend de l'adresse IP de l'utilisateur distant, mais en vérifiant ce cookie - avec cette information à chaque demande semble fonctionner très bien.
Merci pour la réponse rapide, j'étais un peu contre la vérification de la propriété intellectuelle, car je sais qu'il existe des adresses IP dynamiques qui changent assez souvent.
Vous ne devez pas créer vous-même un système d'authentification car tant de choses peuvent aller mal. Utilisez Facebook Connect / OpenID Connect / OpenID, etc.
@ALFRED: Bien que ce soient des méthodes d'authentification très populaires, qui consiste à dire que vous les souhaitez contrôler vos informations d'utilisateur et en espérant qu'ils ne souffrent pas d'une violation de données importante. Le projet de Dan a probablement l'avantage d'être beaucoup plus petit et donc moins probable, cible des pirates informatiques.
S'ils sont enfreints, il vous suffit de modifier 1 mot de passe. Si tout le monde a un autre système de connexion, vous devez couvrir tous les mots de passe (car la plupart des gens utilisent les mêmes mots de passe pour tous les sites Web)