如何避免在 Chrome 中的表单中自动填充用户名/密码?

Posted

技术标签:

【中文标题】如何避免在 Chrome 中的表单中自动填充用户名/密码?【英文标题】:How to avoid username/password autofill within a form in Chrome? 【发布时间】:2014-08-29 13:40:57 【问题描述】:

我有一个管理表单,其中包含用户名和密码字段,Chrome 正在填写该表单,因为它记住了用户名和密码。 我想防止这些字段被自动填充。 我做了很多搜索,已经尝试了自动完成标记(在输入和表单中)、样式标记中的 displany:none 以及对禁用自动完成的 javascript 调用......但这些都不起作用。

你能帮帮我吗?

谢谢!

【问题讨论】:

这是一个棘手的问题,因为新版本的 chrome 已经过时了各种有效答案。如果您找到的解决方案都没有真正起作用(您似乎已经尝试了很多),我建议为这些字段使用随机名称并将这些随机名称存储在您与表单一起发布的隐藏字段中,以便您知道您的用户名/密码字段实际上是如何命名的... Bartdude 说得很好,事实上我正在考虑更改这些名称 【参考方案1】:

链接到要点https://gist.github.com/runspired/b9fdf1fa74fc9fb4554418dea35718fe

<!--
  <form autocomplete="off"> will turn off autocomplete for the form in most browsers
  except for username/email/password fields
  -->
<form autocomplete="off">

  <!--  fake fields are a workaround for chrome/opera autofill getting the wrong fields -->
  <input id="username" style="display:none" type="text" name="fakeusernameremembered">
  <input id="password" style="display:none" type="password" name="fakepasswordremembered">

  <!--
    <input autocomplete="nope"> turns off autocomplete on many other browsers that don't respect
    the form's "off", but not for "password" inputs.
  -->
  <input id="real-username" type="text" autocomplete="nope">

  <!--
    <input type="password" autocomplete="new-password" will turn it off for passwords everywhere
    -->
  <input id="real-password" type="password" autocomplete="new-password">

</form>

【讨论】:

太棒了,现在我们正在针对谷歌浏览器设置蜜罐......这个世界出了点问题【参考方案2】:

我找到了 chrome 的解决方法。我没有在任何其他浏览器上尝试过这个。将密码字段加载为 type="text" 然后在页面加载完成后将类型更改为密码 chrome 不会自动填充用户名和密码。

<input type="text" name="newPassword" id="newPassword" value="" class="form-control" autocomplete="off">
<script type="text/javascript">
$(document).ready(function()
    $('#newPassword').attr('type', 'password');
);
</script>

【讨论】:

【参考方案3】:

添加 autocomplete="something" 属性对我没有帮助。 我的表单有文本类型输入,Chrome 不断用登录数据填充它。 添加隐藏的文本类型输入也无济于事。但解决方案是在可见输入之前添加带有文本和密码类型的隐藏输入字段

 <input type="text" style="width:0;height:0;visibility:hidden;position:absolute;left:0;top:0" />
 <input type="password" style="width:0;height:0;visibility:hidden;position:absolute;left:0;top:0" />

使用 Chrome 版本 74 测试

【讨论】:

【参考方案4】:

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

这是错误的; 2014 年 7 月,Firefox 是最后一个最终实施更改以忽略任何试图关闭密码自动完成功能的网站的主流浏览器。

Bugzilla Bug 956906 - ignore autocomplete="off" when offering to save passwords via the password manager Reddit discussion Chrome's announcement when they began ignoring autocomplete=off

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

Chrome 会忽略它 Safari 会忽略它 IE 忽略它 Firefox 忽略它

如果我是特别的snowflake怎么办?

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

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

这并不违反声明:

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

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

不是 网络服务器 有古怪的政策 是客户端 user-agent 具有古怪的策略

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

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

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

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

来自Chrome Policy List

启用自动填充

启用自动填充

数据类型:布尔值 (REG_DWORD)

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

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

请告诉公司经理,试图禁用密码自动完成是错误的。浏览器故意忽略任何试图这样做的人,这是非常错误的。那些人应该停止做错事。™

tl;dr:我的浏览器会记住我在您网站上的登录信息。如果你不喜欢它:那是你的问题。我不会为了你而牺牲我的喜好。

换一种说法

在这些点上存在很多混淆或分歧。让我澄清一下,并尽可能简单地说:

如果我想保存我的 HIPPA 密码:这是我的权利 如果我想保存我的 PCI 密码:这是我的权利 如果我想保存“用户的新密码”:这是我的权利 如果我想保存一次性密码:这是我的权利 如果我想保存我的“第一个颜色最喜欢的少女”,回答:这是我的权利。

否决用户的意愿不是您的工作。这是他们的浏览器;不是你的。

如果 i 不想保存该值,i 将点击 Nope

无论是您、您的经理、HIPPA、欧盟还是 GDPR,都无法推翻我的意愿。这是我的浏览器。我是用户。我负责。

如果有不同意见 关于您的浏览器的行为方式 那么 可以配置你的浏览器 满足您的个人喜好

但你不能把它们强加给其他人。

但如果我们允许保存密码,则会违反 HIPPA-PCI-GDPR-PII。我们需要关闭自动填充功能!

不,你没有。我是正确的。你错了。每个浏览器都同意我的观点。如果您不喜欢某事,我建议您与治疗师谈谈。

【讨论】:

实际上,我认为自动完成功能让任何窃取计算机的人都可以非常容易地通过用户名和密码登录访问每个站点。输入单个字母 a-b-c- 直到自动完成显示您之前输入的用户名。选择它,密码将自动填充。这就是为什么公司经理应该让您禁用 AutoFill - 如果您最近使用过 Google Chrome,您会知道 Autofill 有自己的(非常顽固,通常非常错误)的想法。 @GeoffKendall 存储凭据are encrypted with the user's Windows password。除非他们知道您的 Windows 密码,否则他们无法窃取您的网站密码。 @GeoffKendall 如果用户让他们的机器/Pgp/TrueCrypt/Veracrypt/Keepass/1Password/PasswordSafe/LastPass 解锁然后走开:问题出在用户身上。加密仅在使用时有效。而且,如果用户不想使用密码管理器,那是他们的决定——而不是网站的决定。 @GeoffKendall 如果不希望你的网络浏览器自动填充你的密码,那么告诉你的网络浏览器不要保存你的密码。不要试图告诉 my 网络浏览器它不能在 my 计算机上保存 my 密码。如果您不喜欢保存密码,因为您离开时无法锁定机器,请不要使用它。你有能力不使用它。您有禁用它的组策略。网站作者试图剥夺我行使个人偏好的能力;这就是为什么该功能消失且不再回来的原因 您的咆哮内容丰富,但最终毫无用处。 Chrome 填写了错误的字段,它破坏了我的网站。该字段未命名为“用户名”,也不是 type=password,但它仍然始终如一地输入用户用户名。所以你的浏览器是愚蠢的,它应该停止做错事。™【参考方案5】:

我最终做了这样的事情:

 <input type="password"
       id="password-field"
       onClick="yourFunction()"
       class="form-control"/>


 function yourFunction() 
   var temporalValue = $('#password-field').val();
   $('#password-field').val("");
   $('#password-field').attr('type', 'text');

   myAjaxRequestPromise(temporalValue).then(function(version) 
      //more logic
   , function(errorResponse) 

     // Just a hack to fool browsers and do not store my password
     $('#password-field').val(temporalValue);
     $('#password-field').attr('type', 'password');

     // more logic
   );
 

并始终确保 $('#password-field').val("") 初始化字段时没有值,它可能是在您显示模态或加载页面回调时

它似乎在 Safari/Chrome/Firefox 上运行良好

它基本上在向服务器发出 Ajax 请求之前在输入类型之间切换,如果出现错误,我们会再次将旧值设置回输入。

【讨论】:

【参考方案6】:

为防止 Chrome 自动填充其对您的用户名的想法(从而让任何人和每个人都可以访问该帐户,或者只是让拥有多个用户名的每个人讨厌便便),请提供值 ' '(一个空格) 作为用户名。

<input type='text' value = ' ' name = 'username' />

【讨论】:

【参考方案7】:

html 5 中,您可以通过以下两种方式之一来实现...

<form action="demo_form.asp" autocomplete="off">

或单独控制

<input type="email" name="email" autocomplete="off">

更多信息 - http://www.w3schools.com/html/html5_form_attributes.asp

【讨论】:

我不理解赞成票,因为 OP 明确表示他已经尝试过但没有任何成功,并且对比 w3schools 更可靠的来源进行的一些研究表明,这些属性确实对 chrome 没有影响。跨度>

以上是关于如何避免在 Chrome 中的表单中自动填充用户名/密码?的主要内容,如果未能解决你的问题,请参考以下文章

如何防止 chrome 自动填充表单中的每个字段?

HTML登录表单:提供用户名,自动填充密码

删除 HTML 表单的 Chrome 自动填充功能

借助 Chrome 和其他人的自动填充功能,我们如何验证用户是用户?

自动填充上的 jQuery 函数(chrome)

jquery 防止自动填充表单