阻止Chrome提示从输入框保存密码?

问题描述 投票:8回答:7

Chrome最近更新了一个恼人的弹出窗口,该弹出窗口来自地址栏中的图标,并提示在用户提交表单时在页面上保存密码。此页面上没有其他输入框,没有其他浏览器提示保存此密码,因此我不知道Chrome的原因。它是一个密码,因此它不应该在输入框中以纯文本形式显示,但它不是应该保存的密码 - 它不是登录凭据。实际上非常重要的是计算机的用户不知道这个密码 - 其他人必须为他们输入密码 - 所以如果浏览器保存它就会很糟糕。

如何防止Chrome(和所有浏览器)提示您保存此密码?

<form action="/..." method="post" onsubmit="return pwFormIsSubmittable();">
    <p>Password: <input autofocus="" type="password" name="1409_password" style="width:100px" tabindex="1" autocomplete="off"></p>
    <div class="tabSubmitButtons">
        <input type="button" name="event=default" value="Cancel" onclick="window.location='...'" tabindex="3">");
        <input type="submit" value="Submit" onclick="submitForm();" tabindex="2">
        <input type="hidden" name="begin" value="Yes">
        <!-- couple other hidden inputs -->
    </div>
</form>

javascript html google-chrome
7个回答
8
投票

浏览器忽略autocomplete=off的原因是因为有些网站试图禁用自动填写密码。

那是错的; 2014年7月,Firefox是最后一个主要的浏览器,它最终实现了更改,忽略了任何试图关闭自动填充密码的网站。

任何网站试图绕过浏览器的偏好都是错误的,这就是浏览器忽略它的原因。没有理由知道为什么网站应该尝试禁用密码保存。

  • Chrome忽略了它
  • Safari忽略了它
  • IE忽略了它
  • Edge忽略它
  • Firefox忽略了它

微软甚至不得不在IE11之前解释它不是浏览器中的一个错误 - 该网站被破坏了:Why Won’t IE Remember My Login Info?archive.is

如果我是一个特殊的snowflake怎么办?

有人提出了一个很好的用例:

我有一个共享的公共区域,亭子式计算机。我们不希望有人(意外或有意)保存他们的密码,以便下一个用户可以使用它。

这并没有违反声明:

任何网站试图绕过浏览器的偏好都是错误的

那是因为在共享信息亭的情况下:

  • 它不是具有古怪政策的网络服务器
  • 它是具有奇怪策略的客户端用户代理

浏览器(共享计算机)是要求不尝试保存密码的浏览器。

防止浏览器保存密码的正确方法 是将浏览器配置为不保存密码。

由于您已锁定并控制此自助服务终端计算机:您可以控制设置。这包括保存密码的选项。

在Chrome和Internet Explorer中,您可以使用组策略(例如注册表项)配置这些选项。

来自Chrome Policy List

AutoFillEnabled

启用自动填充功能

数据类型:布尔值(REG_DWORD)

Windows注册表位置:Software \ Policies \ Chromium \ AutoFillEnabled

说明:启用Chromium的自动填充功能,并允许用户使用以前存储的信息(如地址或信用卡信息)自动填写Web表单。如果禁用此设置,用户将无法访问自动填充。如果启用此设置或未设置值,则自动填充将保持在用户的控制之下。这将允许他们配置自动填充配置文件并自行决定是否打开或关闭自动填充功能。

请将这个词告诉企业经理,试图禁用自动填写密码是错误的。浏览器故意无视任何试图这样做的人是错误的。那些人应该停止做错事。™


我们需要阻止政府,公司政策,安全审计员,PCI,HIPPA试图阻止用户保存密码。没有有效的用例来阻止用户保存其凭据。

  • 如果您有密码重置屏幕:密码应输入未屏蔽的明文框
  • 如果您需要2FA密码:密码应输入未屏蔽的纯文本框
  • 如果您有one-time password:密码应输入未屏蔽的纯文本框

或者,您可以建议一种允许网站阻止保存密码的替代方案 - 只要它不会阻止用户保存任何密码。

换句话说

换一种说法:

  • 如果用户浏览器
  • 错误“请输入您最喜欢的婚前姓名的第一个颜色的名称。”获取新密码
  • 和用户
  • 不想要他们的浏览器
  • 更新密码
  • 然后他们
  • 将点击Nope

enter image description here

过度统治用户的意愿不是你的工作。这是他们的浏览器;不是你的。


6
投票

一种解决方案或解决方法是在真实密码输入框上方添加<input type="password" style="display:none"/>。 Chrome只会尝试保存它找到的第一个密码,如果它是空白的,它不会抛出保存它的对话框。


3
投票

而不是使用输入类型密码,使用样式设置为style =“ - webkit-text-security:disc;”的类型文本。这将用点替换字符。

<input type="text" id="password" style="-webkit-text-security: disc;">

使用点还有其他选择:

input { -webkit-text-security: none; }
input { -webkit-text-security: circle; }
input { -webkit-text-security: square; }
input { -webkit-text-security: disc; /* Default */ }

答案在这里找到:how to disable save password prompt in chrome


1
投票

您可以在提交表单之前将密码字段的类型更改为文本:

<script type="text/javascript">
    function validate() {
    return true;

}

function copyPass() {
    document.getElementById("hidPassword").value = document.getElementById("passwordField").value;
 if (document.getElementById("passwordField").value != "") {
        var passwordLength = document.getElementById("passwordField").value.length;
       document.getElementById("passwordField").value =  "•".repeat(passwordLength);
    }
    document.getElementById("passwordField").type = 'text';
}

function changeType() {
    document.getElementById("passwordField").type = 'password';
 document.getElementById("passwordField").value = document.getElementById("hidPassword").value;
}
</script>
<form method="post" action="yoururl" runat="server">

      <input type="text" name="username" />
      <input type="password" id="passwordField" name="passwordField" onfocus="javascript:changeType()" onblur="javascript: copyPass()" />
          <input type="hidden" name="hidPassword" id="hidPassword" value="" />
      <input type="submit" runat="server" name="btnsubmit" value="Submit" onclick="javascript:return validate()" />

    </form>

0
投票

在Chrome的更高版本中,他们决定忽略密码的autocomplete =“off”...请参阅:

https://groups.google.com/a/chromium.org/forum/#!msg/chromium-dev/zhhj7hCip5c/PxbtDtGbkV0J

如果这是项目要求,这是另一个用你可能尝试的hacky解决方案来回答这个问题的人:

Chrome Browser Ignoring AutoComplete=Off


0
投票

我找到了一种让Chrome忽略密码/用户名组合的方法,即使他们都是这个名字。

<input name='username' type='text'>
<input name='password' type='password' 
       onblur='this.type="password"'
       onfocus='this.type="text"'>

关键点是设置onbluronfocus类型更改。

你也可以这样做:

$('input[name="password"]').blur(function(){
    $(this).attr('type', 'password')
})
$('input[name="password"]').focus(function(){
    $(this).attr('type', 'text')
})

不知道为什么。我猜这是一个错误。


0
投票

我修复了以下标记

#txtPassword {
  -webkit-text-security: disc;
}
<form autocomplete="off">
  <input type="text" name="id" autocomplete="off"/>
  <input type="password" id="prevent_autofill" autocomplete="off" style="display:none" tabindex="-1" />
  <input type="password" name="password" id="txtPassword" autocomplete="off"/>
  <button type="submit" class="login100-form-btn">Login</button>
</form>
© www.soinside.com 2019 - 2024. All rights reserved.