在政府医疗机构工作的乐趣之一是必须处理所有围绕PHI(受保护的健康信息)的偏执。不要误解我的意思,我支持尽一切可能保护人们的个人信息(健康状况、财务状况、上网习惯等),但有时人们会有点太神经质了。

举个例子:我们的一位州客户最近发现浏览器提供了保存密码的方便功能。我们都知道它已经存在了一段时间,完全是可选的,由最终用户决定是否使用它是一个明智的决定。然而,目前有一点骚动,我们被要求找到一种方法来禁用我们网站的功能。

问:网站有没有办法告诉浏览器不要提供记住密码的功能?我从事网络开发已经很长时间了,但我不知道我以前遇到过这种情况。

任何帮助都是感激的。


当前回答

我不确定它是否能在所有浏览器中工作,但你应该尝试在表单上设置autocomplete="off"。

<form id="loginForm" action="login.cgi" method="post" autocomplete="off">

禁用表单和密码存储提示并防止表单数据在会话历史中缓存的最简单和最简单的方法是使用值为“off”的自动完成表单元素属性。

从https://developer.mozilla.org/en-US/docs/Web/Security/Securing_your_site/Turning_off_form_autocompletion

一些小研究表明,这可以在IE中工作,但我不能保证;)

@Joseph:如果严格要求通过实际标记的XHTML验证(不知道为什么会这样),理论上你可以在之后用javascript添加这个属性,但禁用js的用户(可能可以忽略不计,如果你的网站需要js,则为零)仍然会保存他们的密码。

jQuery示例:

$('#loginForm').attr('autocomplete', 'off');

其他回答

其实不是——你唯一能做的就是在网站上提供建议;也许,在他们第一次登录之前,您可以向他们展示一个表单,其中的信息表明不建议他们允许浏览器存储密码。

然后,用户将立即按照建议,在便利贴上写下密码,并将其粘贴在显示器上。

我不确定它是否能在所有浏览器中工作,但你应该尝试在表单上设置autocomplete="off"。

<form id="loginForm" action="login.cgi" method="post" autocomplete="off">

禁用表单和密码存储提示并防止表单数据在会话历史中缓存的最简单和最简单的方法是使用值为“off”的自动完成表单元素属性。

从https://developer.mozilla.org/en-US/docs/Web/Security/Securing_your_site/Turning_off_form_autocompletion

一些小研究表明,这可以在IE中工作,但我不能保证;)

@Joseph:如果严格要求通过实际标记的XHTML验证(不知道为什么会这样),理论上你可以在之后用javascript添加这个属性,但禁用js的用户(可能可以忽略不计,如果你的网站需要js,则为零)仍然会保存他们的密码。

jQuery示例:

$('#loginForm').attr('autocomplete', 'off');

我在这个问题上苦苦挣扎了一段时间,并有了一个独特的解决方法。特权用户不能让保存的密码为他们工作,但普通用户需要它。这意味着特权用户必须登录两次,第二次强制不保存密码。

有了这个要求,标准的autocomplete="off"方法并不适用于所有浏览器,因为密码可能是从第一次登录时保存的。一位同事找到了一种解决方案,在关注新密码字段时替换密码字段,然后关注新密码字段(然后连接相同的事件处理程序)。这是有效的(除了它在IE6中造成了一个无限循环)。也许有办法,但这让我头疼。

最后,我尝试将用户名和密码放在表单之外。令我惊讶的是,这竟然起作用了!它可以在IE6上运行,也可以在Linux上运行当前版本的Firefox和Chrome。我还没有进一步测试它,但我怀疑它在大多数(如果不是所有)浏览器中都能运行(但如果有一种浏览器不关心是否没有表单,我也不会感到惊讶)。

下面是一些示例代码,以及一些jQuery来让它工作:

<input type="text" id="username" name="username"/>
<input type="password" id="password" name="password"/>

<form id="theForm" action="/your/login" method="post">
  <input type="hidden" id="hiddenUsername" name="username"/>
  <input type="hidden" id="hiddenPassword" name="password"/>
  <input type="submit" value="Login"/>
</form>

<script type="text/javascript" language="JavaScript">
  $("#theForm").submit(function() {
    $("#hiddenUsername").val($("#username").val());
    $("#hiddenPassword").val($("#password").val());
  });
  $("#username,#password").keypress(function(e) {
    if (e.which == 13) {
      $("#theForm").submit();
    }
  });
</script>

Markus提出了一个很好的观点。我决定查找autocomplete属性,得到以下内容:

使用这个的唯一缺点 属性是不规范 (适用于IE和Mozilla浏览器), 并且会导致XHTML验证 失败。我认为这是一个 打破验证是合理的 然而。(源)

所以我不得不说,虽然它不是100%的工作,但在主要的浏览器处理,所以它是一个伟大的解决方案。

网站有没有办法告诉浏览器不要提供记住密码的功能?

该网站通过使用<input type="password">告诉浏览器这是一个密码。所以如果你必须从网站的角度来做这件事,那么你就必须改变它。(显然我不建议这样做)。

最好的解决方案是让用户配置浏览器,这样它就不会记住密码。