gpt4 book ai didi

security - 查看我的设计:网站的密码重置功能

转载 作者:行者123 更新时间:2023-12-02 08:02:01 26 4
gpt4 key购买 nike

当某人丢失密码时,他们单击丢失或忘记的密码链接。
他们需要输入电子邮件地址,然后回答自己的秘密问题
如果机密问题正确,则会向他们发送一封电子邮件,其中包含一个链接,该链接会在24小时后失效。

发送电子邮件时,将在数据库表中输入一条记录,其中包含以下信息:
-需要重设密码的人的电子邮件
-密码重置将过期的时间
-提交密码保留请求的时间。

发送的链接将引导用户到一个允许他们输入新密码的表单。
他们需要以这种形式输入电子邮件地址和密码X2。

当他们单击“提交”时,将对db进行检查,以确保电子邮件有效(已重置密码)并且尚未过期(通过比较两个日期以查看过期时间是否已过期),即24小时)

如果电子邮件有效且尚未过期,并且两个密码匹配并满足最小要求,则将应用新密码。

成功时会给出一条确认消息。

Q1。这是恢复密码的好模型吗?
Q2。如何确保发送到用户地址的链接是唯一的?没有人会得到相同的链接吗?这样一来,没有人可以进入密码重设页面并尝试不同的电子邮件,而是让每个需要重设的帐户都有自己的唯一URL,该URL仅适用于该帐户。

关于第二季度:

我在想,当用户请求重置密码时,会生成一个随机的唯一ID,并将其存储在24小时后到期的同一记录中。这个随机唯一ID的列可以称为“ rid”

电子邮件中将发送给用户的链接将以?rid = xxxxxxxxxxxxx结尾

当用户在重置密码的页面中单击“提交”时,页面顶部的“ rid”用于从数据库中获取相应的电子邮件地址,并将其与表单中的电子邮件地址进行比较。这样做可以确保每个密码重设案例将具有其自己的唯一URL,其他任何帐户都不能使用该URL来重设其密码。

这是可行的解决方案吗?

任何贡献或建议,将不胜感激。

最佳答案

最佳:


通过OpenID登录。更少的编码复杂度,更少的点击,更少的键入,更少的时间浪费。
做完了问题尚无定论。无需担心,其他人已经解决了这个问题。


有十亿个站点实施了十亿个身份验证方案,在99.999%的情况下,这是不必要的。我为什么要以用户身份信任您作为开发人员,所以不要以纯文本形式存储我的密码,也不要泄露密码或自己被黑客入侵?很少有人为每个站点使用不同的密码...

如果这不可能,那么make会尽可能轻松:


我单击“忘记密码了?”链接。如果我已经输入了电子邮件(例如,尝试登录失败后),它将自动发送一封邮件。如果我没有输入密码,只需隐藏密码字段并告诉我输入密码。不要重新加载或将我转发到其他页面。
我得到了一些键的链接(例如https://site.com/account/reset?key=a890ea8219175f890b7c123ee74a22)。绑定到我的帐户的某些唯一哈希值会在数小时之内失效。尽可能使用SSL。
我单击链接,然后您通过密钥获取我的帐户详细信息,确保它有效且尚未过期。我输入两次新密码。我已经知道我的电子邮件地址是什么,并且您已经知道我的电子邮件地址是什么,并且任何可能的黑客也都会知道我的电子邮件是什么,因此请不要键入我的电子邮件。将链接持续一整天是过分的。在一个小时或更短的时间内超时。
我讨厌安全问题。别问我基本上,这只是第二个密码,故意使它的安全性降低,因此您将永远记住它。我没有飞行常客里程,也不知道母亲的娘家姓等等。停下来。我知道这里可以阻止可能入侵您电子邮件的陌生人,但是除非您是PayPal,否则我认为这是过度设计。
当您确认密码匹配并且可以接受时,请更新数据库(仅存储密码的哈希哈希,而不存储密码本身!)并立即登录。不要将我重定向到登录页面,在该页面上我必须重新输入我已经几次给您的信息(即使您已经知道是我并且对我足够信任,也可以更改自己的密码)。真烦人用户不耐烦。


我还不喜欢基于以下内容随机生成的密码:


通常,无论如何,我只是从邮件中复制粘贴密码。复制粘贴密码是您永远不希望用户执行的操作。
我必须手动更改密码,这意味着在用户控制面板或帐户设置中出现混乱。我不耐烦!在我使用一次性密码登录的那一刻,您可以使用“更改密码”来解决问题,但这意味着增加了代码复杂性。现在,您需要为此添加一个标志,添加另一个重定向,处理用户输入新密码时超时的情况,等等。
因为我只是人类,而人类却患有ADHD,所以我通常会忘记执行上述操作,最终我得到的密码都是垃圾密码,下次我也需要登录时,必须从电子邮件中查找并复制该密码。我的错,但我仍会为此归咎于您的网站。 ;-)


随机生成的密码解决方案也暗示着您将始终使用基于密码的解决方案的心态,当基于链接的身份验证似乎在可用性和安全性方面成为未来(OpenID等)时(我不希望有一百小网站知道我的登录详细信息!)。

更新以回复评论:

为什么散列就足够了:如果黑客能够(在一小时之内)猜出您生成的散列的全部128位(例如),那么为什么他(她)也不能猜出电子邮件?我知道询问电子邮件和/或安全性问题也“更加安全”,但是,如果您考虑一下,电子邮件通常非常可预测且统一,且熵率较低。我怀疑它们是否可以指望包含超过50位信息。 (可能少了很多。)我敢打赌,与50位随机整数相比,我会更快地猜测您的电子邮件。但是,如果真的很担心,您要做的就是向哈希添加更多位。 256位左右的字符应该用于过度杀伤模式-SHA256(salt, email, old pw hash, time stamp, maybe some bytes from /dev/urandom)或类似的功能...如果黑客可以预测到这一点,那么您实际上无能为力。显然,他可以控制《黑客帝国》,如果他愿意的话,可以将他的思想投射到硬盘驱动器中的磁性磁盘上。

仍然是Pro-OpenID:我访问的任何我创建用户的新站点都应该非常令人信服,因为他们为什么想要知道我的(一次性)密码,以及他们在提供OpenID或Google / Facebook / etc等安全性方面为我提供了什么。不-或为什么他们不信任Google / Facebook / etc。 (我知道)没人记得30种不同的密码。通常,人们会重用它们,因此,如果这些第三方站点创建者愿意,那么对他们的用户进行欺骗确实非常容易。如果我使用惯常的信息在您的站点上注册,那么您可以立即接管我的Last.FM和Reddit帐户,大概还有我曾经使用过几次却忘记了的十几个站点。实际上,在当今时代,我有点希望站点如果想要严格不需要的详细信息,要么变得愚昧无知,要么怀有恶意,所以这就是为什么我将其称为一次性密码-每次注册时都感觉像我的意思是“在这里,拥有我的Reddit帐户,这与我将用于您的站点的L / P(否则我会忘记)。很好,我对此没有特别的依附。”当然,如果他们愿意的话,Google实际上可以接管我所有的在线自我,但是就目前而言,我将比您更信任Google(没有冒犯!)。

关于security - 查看我的设计:网站的密码重置功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3221788/

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