在Firefox中禁用密码自动完成?

时间:2014-08-21 04:03:35

标签: javascript html html5 firefox

最近Firefox开始忽略autocomplete =" off"对于密码字段,现在允许用户始终保存密码。我们有成千上万用户使用的大型应用程序,根据法律,我们需要确保密码永远不会以明文形式保存在客户端计算机上。

我们有什么方法可以阻止Firefox保存这些密码?我们找到了Chrome的解决方法(它只保存了屏幕上的第一个密码字段,因此我们在真正的密码字段之前添加了一个隐藏的密码字段),但我们还没有运气好的Firefox。截至目前,我们唯一的选择是完全禁用Firefox支持。

是的,我意识到阻止用户保存密码很烦人,但我们别无选择......这是联邦法规强加给我们的要求。

4 个答案:

答案 0 :(得分:3)

这个问题在办公室引发了很多争论,但我们想出了一个解决方案。

使用按钮单击事件提交表单(而不是正常的提交按钮)。然后填充隐藏字段,删除可见字段的值并提交。 JSFIDDLE

点击活动示例:

$('#post').click(function(e) {
    var password = $("#password");
    var realPassword = $("#therealdeal");
    realPassword.val(password.val());
    password.val('');
    $('#form').submit();
});

似乎在提交事件中,浏览器将序列化表单并使用serlized对象值进行提交。这就是为什么你不能简单地做一些像

这样的事情

不工作样本

$('#form').submit(function(e) {
    var password = $("#password");
    var realPassword = $("#realpassword");
    realPassword.val(password.val());
    password.val('');
});

即使在真正的提交发生之前清除了dom上的值,它仍然会从序列化表单对象中读取。

在IE,Firefox和Chrome中进行了测试

答案 1 :(得分:1)

请改用<input type=text autocomplete=off>。这样的控件根本不会受密码管理器的影响。它不会掩盖用户键入的字符。否则,它与type=password的工作方式相同。

如果更高功率不能接受可用性改进(没有屏蔽),则需要创建自己的屏蔽行为(捕获输入事件,将输入更改为“*”或其他一些屏蔽字符,保存实际输入一个隐藏的领域)或找到一个为你做这件事的图书馆工具。

答案 2 :(得分:1)

Firefox不会在自动填充数据库中存储密码;它只提供将它们存储在密码管理器中。如果用户在Preferences-&gt; Security中提供“主密码”,则密码管理器的数据库将被加密。或者,如果在Preferences-&gt; Security中禁用密码管理器,密码管理器将永远不会存储加密的密码或其他密码。

如果您的目标是要求密码永远不会以纯文本格式存储,那么尝试阻止浏览器存储它们并不是一种特别有效的策略。用户可以随时在桌面上保留一个充满密码的文本文件。

Firefox并不是唯一一个忽略autocomplete="off"密码管理器的人; Internet Explorer 11也是这样做的。 Firefox的这一变化背后的理由记录在https://bugzilla.mozilla.org/show_bug.cgi?id=956906。实质上,共识是,试图要求用户为他们拥有帐户的每个站点记住唯一密码会导致密码重复使用,并且避免这种情况的最佳策略是使用密码管理器。另请参见此主题:https://security.stackexchange.com/questions/49326/should-websites-be-allowed-to-disable-autocomplete-on-forms-or-fields

答案 3 :(得分:-1)

这是我对类似问题的解决方案:

此代码在页面加载后执行:

setTimeout(function(){
    $(".profile-form input[type=password]").val('');
}, 500);

在重置页面之前,只需允许一些时间(在这种情况下,500毫秒),然后重置输入字段的值。没有setTimeout,我没有工作。