使用$ _SESSION ['令牌']进行忘记密码管理

时间:2014-06-29 18:14:14

标签: jquery passwords

我在想什么? 当用户点击忘记密码---对话框打开时,电子邮件输入字段,用户放置他的电子邮件(如果电子邮件是否存在则通过ajax检查电子邮件)....如果电子邮件存在 - >提交按钮变为活动状态--->用户提交--->这也是ajax提交,其中rand()值存储在session(标记)--->然后,该令牌通过邮件发送给用户,并且显示带有输入字段的信息,以便用户给出令牌(从他的电子邮件中可以看到)---->用户放置令牌,用会话(令牌)检查--->如果确定----数据库用此会话(令牌)作为新密码更改----然后要求用户使用此令牌登录....

我不知道它是否正确...但是在DB中存储rand()然后检查....似乎不正确,因为任何人都可以输入密码更改请求,实际用户将受到影响。

或 请提出一些好的做法。

2 个答案:

答案 0 :(得分:0)

这是一个不错的方法。并且您不应该担心用户,因为任何人都可以通过请求成功更改密码,只有当用户的链接电子邮件帐户遭到入侵且您无法执行任何操作时才会这样做。
我认为唯一的问题是会话有该令牌。如果(我不知道它是否可能)以某种方式从会话中提取该令牌,那么它可能是灾难性的。
虽然采用不同的方法 向用户发送链接以及用户名随机密钥作为变量。在数据库中创建一个字段,以将此密钥存储在指定电子邮件的记录中。仅在请求密码恢复时填充此字段 在其URL发送的页面上,从URL中获取变量并根据数据库中的值进行检查。如果正确,则将其重定向到用户自己可以设置密码的页面。

答案 1 :(得分:0)

通常的工作流程如下:

  1. 用户请求重置密码并输入其电子邮件地址。
  2. 每个电子邮件会向用户发送一个带有随机生成的令牌作为参数的URL。该令牌不应该来自现有的值,例如用户ID,因此它不会泄漏任何信息。
  3. 此令牌的哈希仅存储在数据库中,与用户ID一起存储。
  4. 用户点击电子邮件中的链接。
  5. 您的应用程序从URL获取令牌,计算哈希值,并在数据库中搜索此类哈希值。
  6. 如果找到这样的哈希,用户可以输入新密码。
  7. 将令牌存储在数据库或会话中,或者令牌是在URL中还是必须复制,这一点并不重要,但重要的是您只存储令牌的哈希值。令牌应该足够强(20个随机字符),然后可以安全地计算一个没有盐的简单SHA256,可以搜索。

    令牌不应存储为新密码,让用户在令牌有效时输入自己的新密码。