密码更改:最佳做法

时间:2010-08-05 21:48:54

标签: database security authentication web-applications

我正在编写Baby的第一个Web应用程序。我的第一个任务是建立一个认证系统,我认为我已经做好了。不过,我对整个事情都很陌生,所以:

当用户报告他忘记了密码时,我会用纯文本通过电子邮件向他发送临时替换密码。它可能不是处理这种情况最安全的方式,但它就是我现在这样做的方式。我强迫他在下次登录时更改它,我使用的技术是在数据库中携带“必须更改”字段,对于已经发送电子邮件的用户设置为true。

我的问题:在这种情况下,单独的数据库列是最好的策略,还是我能做些什么?

3 个答案:

答案 0 :(得分:3)

单独的专栏非常合理。

操作系统通常具有“密码到期时间戳”字段,只需将时间戳设置为0(AKA 1970年1月1日),该字段就会变成“必须在下次登录时更改”标志。网站通常没有密码到期日期,在这种情况下,一个普通的布尔标志就足够了。

答案 1 :(得分:2)

我认为你正在存储密码哈希和盐渍。如果没有,请这样做。如果是这样,您可以将元数据存储在salt中。例如。 salt是[0-9a-z]{8},但对于临时密码,它是____[0-9a-z]{4}。 (在downvoting之前,人们,继续阅读!)这一点,是一个单独的字段可能会与哈希字段分开编辑。当然,应该永远不会发生,但可以发生。 (失败的查询,愚蠢的系统管理员,发现phpmyadmin和认为他们理解系统的人等)保持密码在盐中的“状态”,防止这样的混乱:验证密码,您将始终能够看到您通过临时密码验证,并且始终能够识别需要“输入新密码”提示的用户。

答案 2 :(得分:1)

我的做法一直是超载电子邮件验证(向注册人发送电子邮件以确保注册人拥有该地址),以充当密码重置机制。我使用有关用户的某些信息(用户名,ID,电子邮件,,重要的是,DB中的当前密码哈希)来制作哈希值,该哈希值包含在通过电子邮件发送给用户的URL中,他们可以设置自己选择的新密码。

话虽如此,相对于用户身份验证的“最佳实践”是用户使用其他人已经编写和广泛测试的库的95%的时间。只需在Google上搜索适合您框架的内容即可。