6

我正在尝试为我的网站实施一个简单的密码重置系统。这个想法是这样的:

  1. 用户请求密码重置链接。
  2. CodeIgniter 系统通过 MYSQL 使用 RAND 和 MD5(我知道它不安全且损坏,可能最好使用 SHA1 或更好,不是重点)通过 MYSQL 生成随机字符串并将其散列,产生 32 位密钥。
  3. 向用户发送包含密钥的链接。
  4. 其余的相当明显。

我想知道是否——

答:MYSQL 函数 RAND 与 MD5(或更好)被生成到设置为 UNIQUE 的字段中,如果它们碰巧生成了该字段下的表中已经存在的键,则会自动重新生成。

B:这是一种可接受的生成密码重置链接的方法。还是最好用盐对用户的电子邮件地址进行哈希处理以防止重复?

显然,这只是围绕整个过程的基本实现和安全需求。

4

1 回答 1

0

对简单、可预测的值使用更复杂的散列并没有多大意义。将电子邮件用作盐会有所帮助——但作用不大。如果您只需要一个随机值,那么为什么不使用随机值 - 用伪密码修饰它对安全性没有帮助(它实际上在这里破坏了它)。只需生成一个随机数(实际上,您可能想要生成几个随机数,转换为更紧凑的基数并连接)并将其与登录信息一起存储(您需要保留原始密码并在用户登录时取消解锁无论如何成功)。

于 2013-04-13T22:09:06.403 回答