HTML - 禁用密码管理器

Posted

技术标签:

【中文标题】HTML - 禁用密码管理器【英文标题】:HTML - Disable Password Manager 【发布时间】:2017-06-16 04:17:16 【问题描述】:

我们的安全团队要求我们禁用 html 表单上受保护字段的密码管理器。例如,下面是一个过度简化的 HTML 表单。当我单击提交按钮时,firefox(版本 51.0.1)会弹出密码管理器。

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
</head>
<body>
    <form name="testform" action="disable-pwd-mgr.htm" method="post"
        autocomplete="off">

        <label for="protected-input">Protected Input</label> 
        <input type="password" size="16" maxlength="16" id="protected-input"  name="protected-input" accept="numbers" />
        <input type="password" id="disable-pwd-mgr-1" style="display: none;" value="stop-pwd-mgr-1"/>
        <input type="password" id="disable-pwd-mgr-2" style="display: none;" value="stop-pwd-mgr-2"/>

        <button name="next" id="next" type="submit" value="Next">
            NEXT
        </button>

    </form>
</body>
</html>

请注意,here 建议的所有替代方案均无效。

    autocomplete=off 不起作用。 有另一个隐藏的输入字段 输入密码无效。

使用两个单独的附加隐藏密码输入,每个都有不同的虚拟值似乎适用于用户实际在受保护字段中输入值并单击提交的情况。但如果该字段留空并单击提交按钮,密码管理器会再次弹出。有趣的是,chrome(55 版)根本不会弹出密码管理器,这很好。有没有人有更好的解决这个问题的方法?

【问题讨论】:

你在这方面使用 javascript 吗?输入中没有名称标签,因此数据永远不会被提交到服务器端,我们是否遗漏了什么? 我不确定你是否可以。 Firefox 和 IE11(不确定 Edge)决定您不能覆盖此行为。 bugzilla.mozilla.org/show_bug.cgi?id=956906 useful reference link : If an author would like to prevent the autofilling of password fields in user management pages where a user can specify a new password for someone other than themself, autocomplete="new-password" should be specified, though support for this has not been implemented in all browsers yet. 您知道禁用密码管理器会导致用户选择哑密码吗? @Julian 虽然这可能是真的,但它确实取决于用户和他们自己的安全能力...... 【参考方案1】:

某些浏览器可能会在输入字段本身上尊重autocomplete="off"

<form name="testform" action="disable-pwd-mgr.htm" method="post"
    autocomplete="off">

    <label for="protected-input">Protected Input</label> 
    <input type="password" size="16" maxlength="16" id="protected-input" accept="numbers" autocomplete="off" />
    <input type="password" id="disable-pwd-mgr-1" style="display: none;" value="stop-pwd-mgr-1"/>
    <input type="password" id="disable-pwd-mgr-2" style="display: none;" value="stop-pwd-mgr-2"/>

    <button name="next" id="next" type="submit" value="Next">
        NEXT
    </button>
</form>

但是,实际上,浏览器(和扩展)通常会忽略此指令。

【讨论】:

【参考方案2】:

这适用于当前的 Firefox (51)、Chrome (55)、Edge (38) 和 IE (11):

使用三个不同的隐藏密码输入和三个不同的值。这似乎阻止了浏览器激活密码管理器,因为它无法猜测这三个值中的哪一个是要使用的新密码。

<form name="testform" action="index" method="post"
      autocomplete="off">

    <input name="disable-pwd-mgr-1" type="password" id="disable-pwd-mgr-1" style="display: none;" value="disable-pwd-mgr-1" />
    <input name="disable-pwd-mgr-2" type="password" id="disable-pwd-mgr-2" style="display: none;" value="disable-pwd-mgr-2" />
    <input name="disable-pwd-mgr-3" type="password" id="disable-pwd-mgr-3" style="display: none;" value="disable-pwd-mgr-3" />

    <label for="protected-input">Protected Input</label>
    <input autocomplete="aus" type="password" size="16" maxlength="16" id="protected-input" name="protected-input" accept="numbers" />

    <button name="next" id="next" type="submit" value="Next">
        NEXT
    </button>
</form>

在过去几年中,浏览器制造商开始忽略密码表单的“autocomplete=off”选项。例如,请参阅the change issue for Firefox。

原因很简单:很多网站基于对安全性的错误理解,想要禁用登录表单的自动完成功能。允许用户将密码存储在安全密码管理器中(当前浏览器提供的)不是安全风险。事实上,它允许用户为不同的网站使用安全的个人密码,从而提高安全性。

因此,请勿尝试禁用浏览器密码管理器,因为您认为这会提高用户的安全性。它没有。


在某些情况下,您可能不希望弹出密码管理器,例如,因为输入的密码是一次性密码或无法再次使用的棕褐色。但是在一次性密码/棕褐色的情况下,为什么要使用密码输入呢?只需使用普通输入即可。


Discussion on the issue on Security Stackexchange

【讨论】:

谢谢!我尝试了两个隐藏的输入,但由于某种原因停止了。如果该字段是 SSN 怎么办?而且是一次性使用?你想阻止用户看到它吗?我们可能可以用 javascript 来掩盖它,但它真的很乱,对吧? @code4kix 您的场景可能是少数不希望密码管理器用于隐藏条目的情况之一。这个问题的答案讨论了一些实现的可能性:***.com/questions/22457344/… 在我接受你的回答之前,如果其他人想权衡一下,我只想再等一会儿。 我发现这个场景现在对我的用例非常烦人。我正在使用 Vue.js 动态呈现 textpassword 类型输入,当它删除 password 输入并将其替换为 text 输入时,密码管理器仍然出现在 text 输入的位置绝对不应该。我尝试使用单个输入并动态更改type attr,但不起作用。我尝试切换出整个输入元素 - 也不起作用。 Chrome 仍然为text 类型提供密码管理器。 @danjah 我建议您使用正确的标签和重现问题的必要代码提出一个单独的问题【参考方案3】:

只是想补充一下,包括:

data-lpignore="true"

在您的输入元素上将禁用该字段上的 Last Pass。不确定其他密码管理器是否有类似的东西。

【讨论】:

【参考方案4】:

现代浏览器在输入密码字段中尊重autocomplete="new-password"。但在 IE 中不支持。

浏览器支持请参考:https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/autocomplete

【讨论】:

autocomplete="new-password" 用于新密码。例如,这使 Firefox 建议使用安全生成的密码,并在提交时要求将其存储为新的/更新的密码。【参考方案5】:

简单破解(2022 年 2 月)

我尝试了很多解决方案都没有奏效,简单的 hack 是

    使用text-security-disc作为font-family来显示文本的字体 字段为disc 使用webkit-text-security CSS 属性(现在是 仅适用于 Chrome,我们可以将其用作 text-security-disc 字体的后备)

示例

<input type="text" name="password" class="password">

<style>
@font-face
  font-family: text-security-disc;
  src: url("https://raw.githubusercontent.com/noppa/text-security/master/dist/text-security-disc.woff");

.password
  -webkit-text-security: disc;
  font-family: text-security-disc;

</style>

在上面的示例中,-webkit-text-security: disc; 用作font-family: text-security-disc 的后备。因此,如果text-security-disc 不可用,那么-webkit-text-security: disc; 将起作用。

祝你好运?

【讨论】:

以上是关于HTML - 禁用密码管理器的主要内容,如果未能解决你的问题,请参考以下文章

密码管理器兼容性的正确 HTML 标记和身份验证流程?

什么是密码管理器?有什么作用?

sql 重置MODx管理员密码并禁用锁定

1Password,Lastpass,Keepass,选择哪个做为密码管理器

1Password,Lastpass,Keepass,选择哪个做为密码管理器

Laravel 密码管理器解密密码