【问题标题】:Using $_SESSION['token'] for forgot password management使用 $_SESSION['token'] 进行忘记密码管理
【发布时间】:2014-06-29 18:14:13
【问题描述】:

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

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

或 请提出一些好的做法。

【问题讨论】:

    标签: jquery passwords


    【解决方案1】:

    通常的工作流程是这样的:

    1. 用户请求重置密码并输入他的电子邮件地址。
    2. 每封电子邮件都会将带有随机生成的令牌作为参数的 URL 发送给用户。令牌不应源自用户 ID 等现有值,因此不会泄露任何信息。
    3. 只有此令牌的哈希与用户 ID 一起存储在数据库中。
    4. 用户点击电子邮件中的链接。
    5. 您的应用程序从 URL 中获取令牌,计算哈希值,然后在数据库中搜索这样的哈希值。
    6. 如果找到这样的哈希,用户可以输入新密码。

    将令牌存储在数据库中还是会话中,或者令牌是在 URL 中还是必须被复制并不重要,但重要的是只存储令牌的哈希值。令牌应该足够强(20个随机字符),然后可以安全地计算一个没有盐的简单SHA256,可以搜索。

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

    【讨论】:

    • 感谢您的帮助..只是想问一下当关闭浏览器选项卡或关闭完整浏览器时会话变量是否被破坏。?
    • @user3525233 - 实际上只有浏览器中的会话 cookie 被破坏,所以之后没有人会知道会话 ID,会话变得无用。服务器会不时删除旧的未使用会话。
    【解决方案2】:

    这是一个不错的方法。而且您不必担心用户,因为任何人都可以通过请求成功更改密码,前提是用户的链接电子邮件帐户被盗用并且您无能为力。
    我认为唯一的问题是会话具有该令牌。如果(我不知道是否可能)有人从会话中提取了该令牌,那么这可能是灾难性的。
    虽然不同的方法是
    向用户发送链接以及 用户名 和 随机键 作为变量。在数据库中创建一个字段以将此密钥存储在指定电子邮件的记录中。仅在请求恢复密码时填写此字段。
    在发送 URL 的页面上,GET the variables from the URL and check them against the values in the database.如果正确,则将其重定向到用户自己可以设置密码的页面。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-04-03
      • 2017-01-21
      • 1970-01-01
      • 2016-05-19
      • 1970-01-01
      • 2010-10-05
      • 2015-12-09
      • 2012-07-25
      相关资源
      最近更新 更多