滚动您自己的“显示密码”功能时的陷阱

信息安全 密码 网页浏览器 html
2021-08-11 11:40:43

我正在考虑在网站上模拟一些较新的浏览器中可用的“显示密码”功能,本质上是作为不支持的浏览器的 polyfill。执行此操作的常用方法是调用一个 JavaScript 函数,该函数在之间切换输入类型passwordtext,但鉴于它是密码数据,我对此持谨慎态度。

  1. 在输入中放置明文密码是否会text导致密码被恶意插件抓取的风险?

  2. password具体来说,除了使用点的视觉混淆之外,现代浏览器是否围绕 -type 输入实施任何安全机制?

  3. 上述链接是否反映了此类功能的当前行业最佳实践?

2个回答

在文本输入中放置明文密码是否存在密码被恶意插件抓取的风险?

恶意插件可以抓取任何表单数据、包含的密码字段,甚至在写入之前将其记录下来。所以改变类型在这里没有区别。

一般来说,试图防御恶意浏览器插件是没有意义的。如果您的用户有一个,那么游戏就结束了。

具体来说,除了使用点的视觉混淆之外,现代浏览器是否围绕密码类型输入实施任何安全机制?

默认情况下,密码字段已关闭自动完成功能。为防止浏览器保存密码并在以后作为建议泄露密码,您必须确保autocomplete="off"在输入字段上明确设置。应该处理键入时的建议和自动填充以前的状态,例如使用后退按钮时。

可能有一些较旧的浏览器会忽略autocomplete="off"- 谁知道,浏览器曾经做过各种愚蠢的事情 - 但我怀疑这是一个很大的比例。不过,可能是个问题。

密码字段的存在使一些浏览器更积极地警告未加密的连接。因此,使用文本字段可能会使警告静音,这很糟糕。但是,如果您将 TLS 与 HSTS 一起使用,那应该不是问题。

此外,它可能会与密码管理器(内置浏览器和外部浏览器)混淆。但这更多的是可用性而不是安全问题。

上述链接是否反映了此类功能的当前行业最佳实践?

除了自动完成问题之外,我认为只要您对肩部冲浪的固有风险没问题,我认为这会很好。不过,谁知道我忽略了什么。

既然你说“行业最佳实践”,我不得不提一下,像这样直接操作 DOM 已经不是通常的做法了,但这与安全性无关。

不过说实话,我不得不承认我不是这个功能的忠实粉丝。感觉有点hacky。除非您有非常具体的理由,否则我建议您不要实施它。不过,这更多是基于我的直觉(以及对非必要功能的普遍厌恶),而不是其他任何事情。

到目前为止,最大的威胁是自动完成功能。确保浏览器没有将密码保存在自动完成历史记录中。

  1. 是的 - 但是,很难解释这一点,因为那些恶意插件可以自己注入 JS 以将密码字段更改为文本字段。
  2. AFAIK,除了阻止字符读取到屏幕并阻止自动完成保存内容(尽管不是内置密码管理器)之外,浏览器对密码字段没有做任何特殊的事情。
  3. 我相当肯定行业最佳实践 (TM) 根本不会这样做,但只要您确保了解风险,就可以安全地进行。

看看这个 Stack Overflow 问题