【发布时间】:2017-06-04 14:31:55
【问题描述】:
构建包含激活或密码重置令牌的链接的最佳方法是什么?该 URL 将通过电子邮件发送,用户需要单击它来激活他们的帐户或重置他们的密码。这方面有很多线索,但似乎没有一致的方法,从安全和开发的角度来看,每种方法似乎都有优点和缺点:
-
链接在查询字符串中包含令牌作为参数和电子邮件地址
http://www.example.com/activations/:token?email=joe@gmail.com通过这种方法,令牌在数据库中进行哈希处理,电子邮件用于查找用户。然后使用 brycpt 之类的库将令牌与数据库中的散列版本进行比较。似乎包含敏感数据,例如查询字符串中的电子邮件地址,exposes some security risks。
-
链接仅包含令牌作为参数或查询字符串。
http://www.example.com/activations/:token这似乎是理想的解决方案,但我不知道如何比较令牌,除非存储在数据库中的令牌未经过哈希处理。从安全的角度来看,一些人认为token in the database doesn't need to be hashed,而另一些人则认为token should be hashed。假设我们在数据库中保留一个散列令牌,遍历数据库中的每个令牌并与链接中的令牌进行比较似乎非常耗时,尤其是在具有大量用户的应用程序中。所以也许我对此有误,但似乎使用这种方法需要我将令牌存储在未散列的数据库中。
有人对最佳方法有任何想法吗?
【问题讨论】:
标签: security passwords token reset activation