禁用浏览器的“保存密码”功能

464

在政府医疗机构工作的乐趣之一就是必须处理与 PHI(受保护健康信息)有关的所有偏执狂。别误会,我完全支持尽一切可能保护个人信息(健康、财务、上网习惯等),但有时人们会变得太敏感。

举个例子:最近我们的一个州客户发现浏览器提供了方便的“保存密码”功能。我们都知道这个功能已经存在了一段时间,是完全可选的,每个用户自行决定是使用还是不使用,但目前出现了一些骚动,我们被迫寻找一种方法来禁用我们网站的该功能。

问题:是否有一种方法可以让网站告诉浏览器不要提示记住密码?我从事网络开发已经很长时间了,但以前好像没有遇到过这种情况。

感谢任何帮助。


7
您应该提供一个Greasemonkey脚本,以便用户可以重新启用它。我认为用户不喜欢被强制每次都输入密码... - ThiefMaster
19
这个问题值得点赞,因为它既有用又清晰明了。另一方面,我不希望人们找到这个“问题”的解决方案。 - Ian Boyd
14
这并不总是一个"问题"。我来这里是因为Firefox提示我保存一个包含WiFi/SSID密码而不是登录用户名/密码的表单密码。这非常恼人,我想停止它。 - srd
2
如果信息非常重要,那么它应该不仅仅通过密码来保护。 - Sam Watkins
2
你应该通过正确设置autocomplete=标签来鼓励使用密码管理器,这是提高安全性的方法。 - Stuart
显示剩余6条评论
36个回答

-2

autocomplete="off" 对于大多数现代浏览器都有效,但我使用的另一种方法在 Epiphany(GNOME 的 WebKit 引擎浏览器)上成功运行,即将一个随机生成的前缀存储在会话状态中(或隐藏字段中,我已经有一个适当的变量在会话状态中),并使用它来更改字段的名称。Epiphany 仍然想保存密码,但返回表单时它不会填充字段。


这比通常的存储方式更糟糕,因为现在用户看不到密码已保存,同时攻击者仍然可以从存储中提取密码。 - CodesInChaos

-2

由于Internet Explorer 11不再支持autocomplete="off"用于input type="password"字段(希望没有其他浏览器会跟随他们的步伐),目前最干净的方法似乎是让用户在不同的页面中提交其用户名和密码,即用户输入其用户名,提交,然后输入其密码并提交。 美国银行汇丰银行网站也在使用此方法。

因为浏览器无法将密码与用户名关联起来,所以它不会提供存储密码的选项。这种方法在所有主要浏览器中都可以正常工作(目前为止),而且不需要使用Javascript即可正常运行。缺点是对用户来说可能更麻烦,并且登录操作需要进行2次postbacks,而不是一次,因此它确实取决于您的网站需要多安全。

更新:如评论Gregory所提到的,Firefox将会遵循IE11的做法,不再对密码字段使用autocomplete="off"


如果您没有指定用户名并且浏览器中存储了多个帐户,Firefox 将显示提示框要求用户选择用户名 :( - heymega
最简单的方法是在表单的开头添加一个没有名称的虚假密码字段,例如 <input type="password" style="display:none;"/>。浏览器只会填充第一个字段,这样我们的表单就能正常工作了。 - Vignesh

-2
另一种解决方案是使用隐藏表单进行POST,其中所有输入都是隐藏类型。可见表单将使用“密码”类型的输入。后者表单永远不会被提交,因此浏览器无法拦截登录操作。

-2

我使用这种方法还没有遇到任何问题:

使用autocomplete="off",添加一个隐藏的密码字段和另一个非隐藏的字段。如果浏览器不尊重autocomplete="off",它会尝试自动填充隐藏的字段。


-3

我认为加上autocomplete="off"并没有什么帮助

我有另一种解决方案,

<input type="text" name="preventAutoPass" id="preventAutoPass" style="display:none" />

在您的密码输入框之前添加以下内容。

例如:<input type="text" name="txtUserName" id="txtUserName" /> <input type="text" name="preventAutoPass" id="preventAutoPass" style="display:none" /> <input type="password" name="txtPass" id="txtPass" autocomplete="off" />

这不会防止浏览器询问和保存密码,但它可以防止密码被填充。

加油!


-8

在我看来,
最好的方法是随机化具有type=password的输入字段的名称。 使用"pwd"前缀,然后是一个随机数。 动态创建字段并向用户呈现表单。

您的登录表单将如下所示...

<form>
   <input type=password id=pwd67584 ...>
   <input type=text id=username ...>
   <input type=submit>
</form>

然后,在服务器端,当您分析客户端提交的表单时,捕获名称以“pwd”开头的字段,并将其用作“password”。


5
请注意,这并不会防止用户保存密码,这是主要的问题。如果我们可以避免保存,则很好。因为仅仅避免自动填写本身并没有真正有用,密码已经被保存在某个地方了。实际上,在您的情况下,用户每次都可以保存它,并且可能会将其高度机密的密码留在浏览器中... - Alexis Wilke
Chrome会积极尝试记住和自动填充用户名+密码字段,即使它们已被重命名。开心 :) - Már Örlygsson

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接