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

时间:2020-03-05 18:44:24  来源:igfitidea点击:

在政府医疗机构工作的乐趣之一是必须处理与PHI(受保护的健康信息)有关的所有偏执狂。不要误会我的意思,我全力以赴来尽一切可能保护人们的个人信息(健康,财务,上网习惯等),但是有时候人们会显得有些跳动。

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

问题:网站是否可以告诉浏览器不要提供记住密码的方法?我从事Web开发已有很长时间了,但是不知道我以前曾遇到过。

任何帮助表示赞赏。

解决方案

回答

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

然后,用户将立即按照建议进行操作,将密码写在便笺上并将其粘贴到监视器上。

回答

我不确定它是否可以在所有浏览器中使用,但是我们应该尝试在表单上设置autocomplete =" off"。

<form id="loginForm" action="login.cgi" method="post" autocomplete="off">
The easiest and simplest way to disable Form and Password storage prompts and prevent form data from being cached in session history is to use the autocomplete form element attribute with value "off". 
  
  From http://developer.mozilla.org/En/How_to_Turn_Off_Form_Autocompletion

一些较小的研究表明,此方法可在IE中使用,但我不做任何保证;)

@Joseph:如果严格要求通过带有实际标记的XHTML验证(不知道为什么会这样),则理论上可以在以后使用javascript添加此属性,但是随后禁用了js的用户(用户群的数量可忽略不计)或者零(如果网站需要js),则仍然会保存其密码。

jQuery示例:

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

回答

Is there a way for a site to tell the browser not to offer to remember passwords?

该网站通过使用<input type =" password">`告知浏览器它是密码。因此,如果必须从网站角度执行此操作,则必须进行更改。 (显然,我不建议这样做)。

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

回答

我知道的一种方法是(例如)使用JavaScript在提交表单之前从密码字段中复制值。

这样做的主要问题是解决方案与JavaScript绑定在一起。

再说一次,如果可以将其绑定到JavaScript,则最好在向服务器发送请求之前在客户端对哈希密码进行哈希处理。

回答

马库斯提出了一个观点。我决定查找autocomplete属性,并得到以下信息:

The only downside to using this
  attribute is that it is not standard
  (it works in IE and Mozilla browsers),
  and would cause XHTML validation to
  fail. I think this is a case where
  it's reasonable to break validation
  however.  (source)

因此,我不得不说,尽管它不能100%全面运行,但可以在主要浏览器中进行处理,因此它是一个很好的解决方案。

回答

我们可以通过随机化每个节目中用于密码字段的名称来防止浏览器匹配表格。然后,浏览器会看到与该URL相同的密码,但不能确保它是相同的密码。也许它在控制其他东西。

更新:请注意,由于其他人指出的原因,这应该是在使用自动完成或者其他策略的基础上进行的补充,而不是对其进行替代。

另请注意,这只会阻止浏览器自动填写密码。这不会阻止它以浏览器选择使用的任意安全级别存储密码。

回答

使用真正的两因素身份验证可避免仅依赖密码,而密码可能存储在比用户浏览器缓存更多的位置。

回答

我一直在做的事情是将autocomplete =" off"和使用javascript / jQuery清除密码字段结合在一起。

jQuery示例:

$(function() { 
    $('#PasswordEdit').attr("autocomplete", "off");
    setTimeout('$("#PasswordEdit").val("");', 50); 
});

通过使用" setTimeout()",我们可以等待浏览器完成该字段,然后再清除它,否则,清除该字段后,浏览器将始终自动完成。

回答

我一直在为这个问题而苦苦挣扎,对这个问题有独特的看法。特权用户无法使用已保存的密码,但是普通用户需要它。这意味着特权用户必须登录两次,第二次不执行任何已保存的密码。

有了这个要求,标准的autocomplete =" off"方法就不能在所有浏览器上都起作用,因为密码可能是从第一次登录时保存的。一位同事找到了一种解决方案,当使用新的密码字段来替换密码字段时将其替换,然后专注于新的密码字段(然后连接相同的事件处理程序)。这是可行的(除非它在IE6中引起了无限循环)。也许可以解决这个问题,但这使我偏头痛。

最后,我尝试仅在表单之外输入用户名和密码。令我惊讶的是,这行得通!它适用于IE6,以及Linux和Firefox上的最新版本。我没有对其进行进一步的测试,但是我怀疑它可以在大多数浏览器(即使不是所有浏览器)中正​​常工作(但是,如果有浏览器不在乎没有表单的话,这也不会令我感到惊讶)。

这是一些示例代码,以及一些使其工作的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>