HTML -禁用密码管理器

zzlelutf  于 2022-12-16  发布在  其他
关注(0)|答案(6)|浏览(172)

我们的安全团队要求我们禁用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都不起作用。

1.自动完成=关闭不起作用。
1.有另一个隐藏的输入字段类型密码没有工作。
使用两个单独的附加隐藏密码输入,每个都有不同的伪值,似乎适用于用户在受保护字段中实际输入值并单击submit的情况,但如果字段为空并单击submit按钮,密码管理器会再次弹出。有趣的是chrome(55版)根本不会弹出密码管理器,这很好,有人有更好的解决这个问题的办法吗?

dy2hfwbg

dy2hfwbg1#

只是想补充一下,包括:

data-lpignore="true"

将禁用该字段上的最后一次传递。不确定其他密码管理器是否有类似的功能。

d4so4syb

d4so4syb2#

这在当前的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“选项。例如,请参阅Firefox的更改问题。
理由很简单:许多网站基于对安全性的错误理解,希望禁用登录表单的自动完成功能。允许用户将密码存储在安全的密码管理器中(如当前浏览器所提供的)并不存在安全风险。事实上,它允许用户在不同的网站上使用安全和单独的密码,从而有助于安全性。
所以,不要试图禁用浏览器密码管理器,因为你认为这会增加用户的安全性,它没有。
在某些情况下,你可能不希望密码管理器弹出,例如,因为输入的密码是一次性密码或tan,第二次就没用了。但在一次性密码/ tan的情况下,为什么要使用密码输入呢?使用普通的输入就可以了。
Discussion on the issue on Security Stackexchange

jucafojl

jucafojl3#

现代浏览器在输入密码字段上支持autocomplete="new-password",但IE不支持。
有关浏览器支持,请参阅:https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/autocomplete

fjaof16o

fjaof16o4#

一些浏览器可能会在输入字段本身上使用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>

然而,在实践中,浏览器(和扩展)经常会忽略这个指令。

2w3kk1z5

2w3kk1z55#

简单的黑客攻击(2022年2月)

我尝试了许多解决方案没有工作,简单的黑客是
1.使用text-security-disc作为font-family,将文本字段的字体显示为disc
1.使用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;将工作。
祝你好运👍

3mpgtkmj

3mpgtkmj6#

截至2022年10月11日,这些功能均不起作用-如果通过显示屏隐藏,则额外的密码字段:无;或可见性:隐藏;被最后一遍忽略。
我所做的就是在一个假密码字段中添加以下内容

<input id="disable_autofill1" name="disable_autofill1" 
  style="height:0; width:0; background:transparent;
         border:none;padding:0.3px;margin:0;display:block;" 
type="password">

这似乎足以最小化这个元素在屏幕上的大小(对我来说几乎是0),同时仍然不会触发最后一遍的恶性算法。我把它放在我真实的的密码字段之前,这甚至不是网站的正确“密码”字段,但无论如何都会被检测为一个。

相关问题