1

我收到了构建一个向经过身份验证的用户显示新密码的页面的不幸要求。我没有成功地抗议这个要求,因为这是一个普遍的坏主意,但我认为陪审团仍然存在,所以也许有人反对显示我还没有尝试过的新密码。你有什么建议吗?

其次,将密码以图像而不是文本的形式显示给用户会更好吗?我担心文本被“刮掉”,我认为使用图像会更困难。如何确保图像不会被用户浏览器缓存?

提前致谢,

4

5 回答 5

4

图像不会很安全。

如果您使用 HTTPS,那么无论哪种方式,密码都是安全的。如果您使用 HTTP,那么密码将以明文形式从表单中发送(我假设您正在显示它以进行某种确认),几秒钟后如何显示它并不重要。

重要的是确保显示密码的页面是不可缓存的。

Cache-control: no-cache, no-store, must-revalidate
于 2009-04-03T11:59:10.923 回答
3

你试过以下吗?

  • 您无法显示密码,因为您不存储它。
于 2009-04-03T11:58:55.900 回答
3

我不确定您要构建什么以及要求是什么,但作为一般经验法则,我不认为这是一个严重的安全问题。让我们看看攻击向量:

  1. 中间人攻击 HTTP 文本流量 - 图像,尤其是对 OCR(CAPTCHA 样式)进行模糊处理的图像将阻止这种攻击,但也可以简单地使用 HTTPS,如porneL 提到的。
  2. 远程桌面应用程序的屏幕抓取 - HTTPS 保护无济于事,屏幕上的混乱图像也无济于事(人类攻击者也可以通过以下方式绕过您对“中间人”的模糊图像保护指示听众存档图像,然后手动检查它们)。如果屏幕刮板后面有人,那么您将没有保护。
  3. 在你的肩膀上窃听 - 如果攻击者只是站在用户身后,那么再次 - 你没有保护。

请注意,如果您的密码是自动生成的,那么您必须将其显示给用户,这是没有办法的。网站试图减轻威胁的一种方法是通过电子邮件发送密码 - 假设用户可以确保他们在没有人查看时阅读电子邮件,在他们自己的时间。不幸的是,电子邮件甚至不会让您受益于加密来保护传输。

在我看来,最好的方法是让用户输入密码(在密码混淆字段中,就像通常那样),然后只存储密码的哈希值,这样你就不需要存储实际密码,防止你显示它给用户。如果您必须向用户展示它(可能是因为您正在生成它),那么请确保您通过 HTTPS 并仅展示它 - 所有的宣传只会使实现复杂化,而不会带来任何安全优势。

于 2009-04-03T12:10:09.883 回答
1

我不确定这是否真的是个坏主意。您必须以任何一种方式将新密码发送给用户。作为未加密的电子邮件发送具有相同的问题 - 使用 Web 邮件时被捕获或被缓存。

我建议使用图像,可能是一些类似的验证码。但这只能保护一点免受自动攻击,而不是人为攻击。

确保事情安全的唯一方法是使用加密,建议使用 HTTPS。然后使用您的网站进行展示可能会比依赖电子邮件或类似的解决方案更安全。

让用户输入新密码也有同样的问题 - 现在您必须将其发送回服务器。

于 2009-04-03T12:09:48.823 回答
0

我只是建议使用 HTTPS 加密流量并仅存储临时密码的哈希值,这样实际密码就不会存储在数据库中。当然,您无法阻止物理“黑客”(例如偷偷摸摸的人)窃取临时密码,但如果可能,您可以要求用户在使用临时密码登录时立即更改密码,从而减轻使用临时密码的风险。

于 2011-03-28T03:41:46.030 回答