如何在不降低我的网站安全性的情况下显示正确长度的屏蔽密码?

How can I show a masked password of the correct length without making my website less secure?

我的 Web 应用程序包含一个配置文件编辑页面,用户可以在其中更改他们的电子邮件地址、密码等。密码字段是 HTML "password" 类型,因此它会自动用项目符号屏蔽其内容人物。密码以散列形式保存在数据库中,因此我没有将实际密码加载到字段中,我只加载字符串“********”,它显示为八个项目符号。然后当提交表单时,我检查提交的值,如果不是“********”,则保存新密码。

问题是用户经常发送帮助票说他们的密码没有正确保存,因为他们输入了 6 或 10 或任何长度的密码,但是当他们 return 编辑个人资料时出现了 8 个点页。所以该网站按预期运行,但我已经厌倦了向用户解释这一点,并且正在尝试考虑如何显示该字段中准确的点数。

我唯一能想到的是,每当我保存密码时,将密码长度与散列密码一起保存,然后使用该长度来显示正确的点数。但这会不太安全,因为它会向黑客显示每个密码的长度。

另一种选择是将密码字段加载为空,希望用户不会对此感到困惑。或者我可以将此选项显示为 "change password" 表单,以指示该表单不会尝试加载已保存的密码。

但首先我想知道是否有准确显示这些点的技巧?

安全的解决方案是,在独立于其他用户配置文件设置的专用页面上处理 password-change。

在 password-change 表单中请求旧密码、新密码以及可能的新密码确认。不要预先填充这些字段,它们不应该也不能在不影响安全的情况下正确显示。

另一方面,用户个人资料页面不应包含任何密码信息。