通过RESTAPI实现忘记密码功能的最佳实践

通过RESTAPI实现忘记密码功能的最佳实践,rest,authentication,restful-authentication,Rest,Authentication,Restful Authentication,我试图通过发送重置密码的链接,即向注册用户发送带有一次性令牌的电子邮件,找到忘记密码功能的最佳实践。令牌将存储在数据库中,当用户单击链接时,我们检查令牌并允许用户设置新密码 设计忘记密码功能时的最佳实践- 令牌必须是不可预测的,这是通过 不是基于时间戳或值的“真”随机码 比如用户id 与密码一样,在将令牌存储到中之前,应该对其进行哈希处理 数据库。这使得它们对攻击者毫无用处,即使 数据库被偷了 复位链路最好短一些,以避免出现故障 向客户端发送电子邮件,并且仅包含安全字符0-9 A-Z A-Z

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

设计忘记密码功能时的最佳实践-

  • 令牌必须是不可预测的,这是通过 不是基于时间戳或值的“真”随机码 比如用户id
  • 与密码一样,在将令牌存储到中之前,应该对其进行哈希处理 数据库。这使得它们对攻击者毫无用处,即使 数据库被偷了
  • 复位链路最好短一些,以避免出现故障 向客户端发送电子邮件,并且仅包含安全字符0-9 A-Z A-Z (base62编码)

  • 令牌应在一位数小时内有一个过期时间

  • 在用户完成操作后,应将令牌标记为已使用 已成功设置新密码

  • 当用户更改其密码或请求其他密码时 重置、过期所有已与其帐户关联的令牌

这些是我发现的一些要点。应该考虑哪些其他安全问题

资料来源:

我还看到了一些其他做法:

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

还应该注意的是,最佳实践通常是使用一个已建立的库,而不是发明自己的机制,因为太多的事情可能会被忽略。

我也有同样的问题,并找到了答案。 我还想补充几点:

  • 通常,如果用户输入了不存在的电子邮件站点,则会显示消息“pwd恢复链接已发送”。这是为了防止黑客确定系统中存在带有电子邮件的用户。但依我看,最好告诉用户电子邮件不存在,因为它通常不记得注册时使用的电子邮件
  • 最好向用户添加一些额外的个人问题,比如生日。若黑客窃取了用户的电子邮件,那个么接收重置链接就会变得更加困难。但由于重置链接可能会发送给用户的网站管理员的问题与生日必须在更改密码页,这是由链接打开
  • 黑客可能会自动向某些用户发送大量信件。一些网站在电子邮件字段附近使用验证码来防止这种情况
  • 成功更改密码后,应关闭所有活动会话,用户必须注销。因此,即使黑客登录,他也会注销
  • 最好像密码一样散列恢复票证。这里应该和密码一样使用:Argon2、SCrypt、BCrypt
  • 在用户恢复密码后,最好将其标记为可能的欺诈,并且在一段时间(如一周)内不允许进行一些关键操作,如从帐户中提款
  • 此外,一些网站正在向用户发送一封信,告知其密码已更改。当用户被记录时,他们会这样做,通常会手动更改它,但当pwd被重置时,可能最好发送相同的后者
    +1用于使用已建立的库。生活和呼吸安全感的人会犯错误。如果你不这样做,你的情况会更糟,而且你会有一套更小的白帽子来找到它们。你能推荐任何库与python social auth和Django Rest framework一起使用吗?似乎有这样的库,但我对python/Django不太了解,不能说它是最好的。你可以试着在slant.co或其他网站上询问(因为“什么是最好的X”对于SO来说是很离题的)。