gpt4 book ai didi

security - 限时或一次性使用的密码重置 token ?

转载 作者:行者123 更新时间:2023-12-04 00:58:38 24 4
gpt4 key购买 nike

用户忘记了密码,并且(几乎)所有成员(member)网站都需要一种方法来帮助用户重新登录。

我想实现常见的场景:

  • 用户访问站点,尝试登录,但无法登录,然后意识到他们忘记了密码——废话!
  • 用户输入邮箱地址并点击“忘记密码”
  • 用户收到带有密码重置链接的电子邮件

  • 以下是我打算如何实现它(C#/ASP.NET MVC):
  • 当用户输入电子邮件并点击“忘记密码”按钮时,我的网站将生成一个 GUID,将其存储在数据库中的成员实体 (member.ResetToken) 中,并通过电子邮件向他们发送 URL 中带有该 GUID 的链接(发送的电子邮件将告知他们只能使用此链接一次)
  • 用户单击该链接,我的网站根据该链接查找他们的帐户 member.ResetToken从网址。如果找到他们的帐户,请向他们显示密码重置表单,当他们完成重置时,它会清除 member.ResetToken从他们的帐户。

  • 这是我的问题:保持这样(他们可以在现在或将来随时使用该链接重置密码)或添加时间戳以限制他们必须重置密码的时间?

    从用户体验的角度来看,在您准备好时重置密码的能力很棒,但我想确保我没有忽略这可能引发的一些安全问题。

    最佳答案

    您的方案确实有效,但有些地方可以改进。但首先是关于时间限制的原始问题:

    让我们问一个相反的问题:为什么 token 应该无限期保持有效?

    没有优势,当两年后可以单击重置链接时,用户要么在大约一个小时内单击该链接,要么他可能已经忘记了该链接(并且可以在必要时请求一个新链接)。另一方面,能够阅读电子邮件并不一定意味着攻击者必须破解电子邮件帐户,例如办公室中打开的电子邮件客户端、丢失的手机、在(丢失的)USB驱动器上备份...

    最重要的改进是,您应该只存储 哈希 数据库中的 token 。有权访问数据库(SQL 注入(inject))的人可能会要求为他喜欢的任何电子邮件地址重置密码,并且因为他可以看到新 token ,所以他可以使用它来设置自己的密码。

    然后我会将这些重置信息存储在一个单独的表中。在那里,您可以存储用户 ID、散列 token 、到期日期以及链接是否已被使用的信息。此时用户并不处于特殊状态。

    也许我误解了这一点,但是重置链接应该指向一个特殊的密码重置页面。当用户进入登录页面时,应该没有特殊处理,登录页面不应该知道有一个未决的密码重置。

    重置 token 应该是不可预测的,这可以通过从操作系统的随机源读取的真正随机代码来实现。

    关于security - 限时或一次性使用的密码重置 token ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19262252/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com