保存密码
密码永远都要哈希保存。
对密码使用哈希算法,将哈希值保存进数据库。为了增加随机性,防止彩虹表这一类的工具,计算哈希的时候,每个用户都有一个不一样的盐值(salt),也会同时保存进数据库。
哈希是单向运算,无法还原,所以即使哈希值泄漏,一般来说,也不会暴露用户的原始密码。
密码重置
重置密码的时候,要给出一个链接,让用户到网页上自己修改密码。
重置链接由于是明文传播,而且直接修改密码,所以必须有失效时间。一般来说,可以设成10分钟失效。
重置密码的时候,识别用户最好依靠邮件地址,而不是用户名。
如果不是采用邮件地址,而是根据用户名识别用户,就没有办法不提示,某个用户名是否存在。某些人的用户名非常特殊,一旦知道该用户名存在,就几乎可以肯定是该人注册的。
记录 IP 地址
在邮件里面告诉用户,哪个 IP 地址在申请重置你的密码。
过滤用户
为了防止机器人攻击,进入重置密码之前,最好加上 CAPTCHA 识别。