Jquery 使用$会话[';令牌';]进行忘记密码管理

Jquery 使用$会话[';令牌';]进行忘记密码管理,jquery,passwords,Jquery,Passwords,我在想什么? 当用户单击忘记密码---对话框打开,显示电子邮件输入字段,用户在其中放置电子邮件(通过ajax检查电子邮件是否存在)…如果电子邮件存在-->提交按钮变为活动-->用户提交-->这也是ajax提交,在会话(令牌)中存储rand()值--->然后,该令牌通过邮件发送给用户,sceen显示有用户提供令牌的输入字段(从他的电子邮件中可以看到)--->user puts token,该令牌通过会话(令牌)进行检查---->如果确定----数据库更改为该会话(令牌)的新密码----然后要求用户

我在想什么?
当用户单击忘记密码---对话框打开,显示电子邮件输入字段,用户在其中放置电子邮件(通过ajax检查电子邮件是否存在)…如果电子邮件存在-->提交按钮变为活动-->用户提交-->这也是ajax提交,在会话(令牌)中存储rand()值--->然后,该令牌通过邮件发送给用户,sceen显示有用户提供令牌的输入字段(从他的电子邮件中可以看到)--->user puts token,该令牌通过会话(令牌)进行检查---->如果确定----数据库更改为该会话(令牌)的新密码----然后要求用户使用该令牌登录

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


请建议一些好的做法。

这是一个不错的方法。您不必担心用户,因为任何人都可以通过请求成功更改密码,前提是用户的链接电子邮件帐户已被泄露,而您对此无能为力。
我认为唯一的问题是会话具有该令牌。如果(我不知道是否可能)有人从会话中提取了该令牌,那么这可能是灾难性的。
尽管不同的方法可能是
向用户发送链接以及用户名随机键作为变量。在数据库中创建一个字段,将此密钥存储在指定电子邮件的记录中。仅在请求密码恢复时填写此字段。

在发送URL的页面上,从URL获取变量,并对照数据库中的值进行检查。如果正确,则将其重定向到用户自己可以设置密码的页面。

通常的工作流如下所示:

  • 用户请求重置密码并输入其电子邮件地址
  • 每个电子邮件都会向用户发送带有随机生成的令牌作为参数的URL。令牌不应从现有值(如用户id)中删除,因此它不会泄漏任何信息
  • 数据库中仅存储此令牌的散列,即具有用户id的散列
  • 用户单击电子邮件中的链接
  • 应用程序从URL获取令牌,计算哈希值,并在数据库中搜索此类哈希值
  • 如果找到这样的散列,用户可以输入新密码
  • 是否将令牌存储在数据库或会话中,或者令牌是否位于URL中或必须复制,都不重要,但重要的是只存储令牌的哈希。令牌应该足够强(20个随机字符),然后可以安全地计算一个不含盐的简单SHA256,可以搜索它


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

    谢谢帮助。。只是想问一下,当浏览器选项卡关闭或完全浏览器关闭时,会话变量是否被销毁。?@user3525233-实际上只有浏览器中的会话cookie被销毁,因此,之后没有人知道会话id,会话将变得无用。服务器将不时删除旧的未使用会话。