design-patterns - 允许用户更改密码的模式。用户是否必须重复新密码以及输入旧密码?

标签 design-patterns passwords reset-password

有很多关于在 SO 上恢复密码的问题,但不是关于更改密码的问题,请考虑以下两种情况之一:

1) 用户已经在系统中进行了身份验证(通过用户/密码或第三方身份验证,例如 facebook/twitter)
2) 用户知道他或她的旧密码。

鉴于这些起点,我有两个不同的问题,即允许用户以最少的步骤更改他或她的密码的最佳做法是什么。

Scenario (user has already authenticated and logged into system):
Enter Old Password:_______ (1: can I get rid of this)
Enter New Password:_______
Enter New Again: _______ (2: can I get rid of this)



1)可以不让用户输入他的旧密码吗?在这种情况下,我假设用户已经通过系统身份验证。让用户重新输入密码似乎是多余的。我知道这对于高安全性应用程序(例如银行)可能很重要,其中用户离开 session 无人看管可能允许某人输入新密码而不知道使他们进入这种情况的密码。

在我展示的示例中,应用程序的安全性不是很高,风险也很低。此外,由于我们允许第三方身份验证(facebook/twitter),那么理论上如果其他人在机器上并且用户拥有 facebook/twitter 的实时 cookie,他们就可以进入该帐户。

2)不让用户输入两次新密码是否可以。这样做感觉有点像 90 年代。人们现在已经习惯了密码,他们输入密码与预期不同的 5% 的可能性似乎并没有超过输入两次密码所花费的时间。在这 5% 的情况下,最坏的情况是他们只需要重置密码(或者只需使用 facebook/twitter 登录并重置密码)。我现在发现这样做的一个网站是 Quora(尽管他们仍然执行第 1 步)。我还没有看到很多其他人这样做。

最佳答案

首先,我要告诫你永远,永远,永远,永远,永远假设用户就是他所说的那个人,尤其是在更改允许他们访问其帐户的 key 时。始终需要密码验证来编辑密码是一种非常常用的方法。

至于两次输入密码,这主要是在后端完成,您可以比较两个密码并确保它们相同。这样做是为了确保用户在输入密码时打算输入密码。连续两次输入相同错字的可能性不大,因此如果两个密码相同,您可以很好地假设它们没有错字。

就我个人而言,我宁愿每天花 10 秒时间重新输入密码,而不必费力地意识到我输入了密码,然后不得不重设密码、访问我的电子邮件、重新访问网站,然后重新输入我的密码。在一天结束时,您仍然需要输入两次,第一种方法更加精简。

而且我永远不会允许用户编辑身份验证方法,而不让他们首先验证使用身份验证方法的能力。一些用户在离开座位时让他们的计算机保持登录状态,这允许其他人坐下来访问私有(private)数据,如果他们可以更改密码而无需输入当前密码,则可以更容易地打开帐户被滥用。

关于design-patterns - 允许用户更改密码的模式。用户是否必须重复新密码以及输入旧密码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6631756/

相关文章:

c# - DDD 和基于重型基础设施的 'domains' - DDD 在这里失败了吗?

java - 手动管理持久性上下文的技巧

database - SSDT : how to protect the password contained in the publish profile?

c - 从函数中获取随机字符

delphi - 如何使用 KeyFile 的客户端身份验证设置连接到 Web 服务的密码?

security - 进行密码检索/重置的安全方法?

c++ - 单例同步 C++

java - 相同配置的多个构造函数应该只创建一个实例

python - 模板 password_reset_form.html 不会覆盖 django 管理模板

c# - 如何使用 ASP.NET MVC 5 的 UserManager 重置密码