web-dev-qa-db-fra.com

Suis-je en générant des jetons de liaison email correctement?

Je développe un système fiable pour la génération et la validation de jeton utilisés principalement pour des liens dans des courriels de confirmation (réinitialiser la demande de mot de passe, modifier le flux de messagerie, activer un compte, etc.).

Il y a quelques points obligatoires:

  • Les jetons doivent être uniques (même lorsque les deux génèrent en même temps) dans le système (dans la base de données)

  • Jeton doit être une utilisation unique

  • Les jetons doivent avoir une expiration
  • Jeton ne peut pas être devinable

De cela, j'ai décidé de générer un jeton comme celui-ci:

token = sha256(user.id + time + uuid(v4) + secret)

Ce jeton n'a pas besoin de porter des informations d'expiration, car il est enregistré dans la base de données avec ces colonnes à l'extérieur.

  1. Ce jeton répond-il à mes exigences ci-dessus points? Sinon, comment modifier mon approche?
  2. Si ce jeton répond à mes besoins, est-il un moyen de le simplifier tout en respectant mes objectifs?

Je le demande, car je sais qu'il y a des exploits connus de ces types de jetons d'utilisation ponctuelle envoyés à un courrier électronique et je ne suis pas sûr que je serai en sécurité.

16
Baterka

Je compterais ça est sûr. Depuis que vous utilisez l'heure utilisateur, UUID et un secret.

Si quelqu'un créait ses propres jetons, le temps seul en fait un facteur difficile et avec les autres secrets ajoutés, il en fera une chose agaçante. Donc, même connaître votre méthode, je serais à parcourir à travers le temps, UUID et le secret. Et pour quoi? Une chance que le jeton soit dans le système et non expiré? Et si vous remarquez un client essayant des charges et des charges de jetons, vous les bloquez simplement.

Le secret et UUID sont vos secrets, l'utilisateur ne le connaît pas. Avec les connaissances ci-dessus, vous aurez un jeton unique à chaque fois (en raison du temps ajouté).

Mais pourquoi faites-vous votre propre méthode? Il y a beaucoup de solutions de génération de jetons déjà là.

0
Dr_Bunsen