通过REST API忘记密码功能的最佳做法

时间:2015-08-11 18:18:55

标签: rest authentication restful-authentication

我正在尝试通过发送重置密码的链接来找到忘记密码功能的最佳做法,即向注册用户发送带有一次性令牌的电子邮件。令牌将存储在数据库中,当用户单击链接时,我们会检查令牌并允许用户设置新密码。

设计忘记密码功能时的最佳做法 -

  • 令牌必须是不可预测的,用a完成最好 "真"随机代码,不基于时间戳或值 喜欢user-id。
  • 与密码一样,在存储令牌之前,应对令牌进行哈希处理 数据库。这使得它们对攻击者毫无用处,即使是攻击者也是如此 数据库被盗。
  • 复位链接最好应短,以避免出现问题 电子邮件客户端,仅包含安全字符0-9 A-Z a-z (base62编码)

  • 令牌的到期时间应在一位数小时内。

  • 在用户拥有之后,应将令牌标记为已使用 成功设置了新密码。

  • 当用户更改密码或请求其他密码时 重置,使与其帐户关联的所有令牌失效。

这些是我发现的一些观点。可以考虑的其他安全问题是什么?

来源: Secure password-reset function Ycombinator News

2 个答案:

答案 0 :(得分:1)

我见过的其他一些做法:

  • 检查用户是否与触发重置密码请求的机器/浏览器/ IP位于同一台机器/浏览器/ IP上(除非它是由管理员/系统启动的。)
  • 可以为帐户生成的重置令牌的速率限制数。

还应该注意的是,最好的做法通常是使用已建立的库而不是发明自己的机制,因为有太多事情可以被忽视。

答案 1 :(得分:0)

我有同样的问题并找到OWASP Forgot Password Cheat Sheet。 还有一些我想补充的内容:

  1. 通常,如果用户输入不存在的电子邮件站点,则显示消息“已发送pwd恢复链接”。这是为了防止黑客确定系统中存在电子邮件的用户。但恕我直言,最好说用户电子邮件不存在,因为通常它可能不记得注册时使用的电子邮件。
  2. 最好向用户添加一些额外的个人问题,例如生日日期。如果黑客窃取了用户的电子邮件,则更难以接收重置链接。但由于重置链接可能由网站管理员发送给用户,生日的问题必须在链接打开的更改密码页面上。
  3. 黑客可能会自动向一些用户发送大量信件。有些网站会使用CAPTCHA附近的电子邮件字段来阻止此操作。
  4. 成功更改密码后,应关闭所有活动会话,并且必须注销用户。因此,即使黑客已登录,他也会退出。
  5. 最好像密码一样哈希修复故障单。这里应该使用与密码相同的hashing algorithms:Argon2,SCrypt,BCrypt。
  6. 在用户恢复密码后,最好将其标记为可能的欺诈行为,并且在一段时间内(如一周)不允许进行一些关键操作,例如从帐户中提取资金。
  7. 还有一些网站正在向用户发送密码已更改的信件。当用户正常记录时,他们会手动更改它,但也许在重置pwd时发送相同的后者是好的。