您如何在 Web 表单字段/输入标签上禁用浏览器自动完成功能?
问:
您如何在主要浏览器中禁用特定输入(或表单字段)的自动完成功能?
答1:
保持自己快人一步,享受全网独家提供的一站式外包任务、远程工作、创意产品订阅服务–huntsbot.com
Firefox 30 忽略密码的 autocomplete=“off”,而是选择提示用户是否应将密码存储在客户端上。请注意 2014 年 5 月 5 日的以下 commentary:
密码管理器总是提示是否要保存密码。未经用户许可,不会保存密码。我们是继 IE 和 Chrome 之后第三个实现此更改的浏览器。
根据 Mozilla Developer Network 文档,布尔表单元素属性 autocomplete 可防止表单数据缓存在旧版浏览器中。
这在 Firefox 3.0.3 中对我不起作用,我必须将自动完成属性放在 FORM 而不是 INPUT 中。
自动完成仅在 HTML 5 标准中定义,因此它会破坏您针对 HTML 4 运行的任何验证。*...
@Winston,您应该将它放在表单和输入元素本身上。这样你就涵盖了浏览器的所有非标准性。
并且记得在测试您的网络应用程序之前禁用您的 autocomplete = on 扩展程序(如果您使用的是 Chrome)。否则你会像我一样觉得自己很傻。 ;)
很惊讶,为什么这个答案被接受并且有这么多选票。即使没有像其他人所说的那样特别。根据我的发现,@Ben Combee 在此线程中提供了最具体且经过验证的解决方案。
答2:
HuntsBot周刊–不定时分享成功产品案例,学习他们如何成功建立自己的副业–huntsbot.com
除了设置 autocomplete=off 之外,您还可以让生成页面的代码随机化您的表单字段名称,可能通过在名称末尾添加一些特定于会话的字符串。
提交表单后,您可以在服务器端处理它们之前剥离该部分。这将阻止 Web 浏览器为您的字段查找上下文,也可能有助于防止 XSRF 攻击,因为攻击者无法猜测表单提交的字段名称。
与使用 autocomplete="off" 相比,这是一个更好的解决方案。您所要做的就是在每次页面加载时生成一个新名称并将该名称保存到 $_SESSION 以供将来使用:$_SESSION['codefield_name'] = md5(uniqid('auth', true));
不,这不是一个更好的解决方案,因为此设置的首选来源是用户代理,也称为 Web 浏览器。支持某些行为(HTML 5 试图这样做)和通过代表用户决定来强制它是有区别的,你建议这是一个“更好的解决方案”。
该解决方案适用于所有浏览器,因此在这方面它“更好”。不过,amn 是正确的,代表您的用户决定禁用自动完成并不是一个好主意。这意味着我只会在非常特定的情况下禁用自动完成功能,例如当您计划构建自己的自动完成功能并且不希望发生冲突或奇怪行为时。
关于 XSRF 攻击,我不确定您描绘的是哪种类型的攻击,但攻击者不能像您在服务器端识别字段的方式一样剥离末端部分吗?或者如果攻击者发布这些字段,他们不能附加自己的随机字符串,因为它会被服务器剥离吗?
@macguru2000 构建自己的自动完成功能是一个完全合法且常见的用例。确实,浏览器应该让开发人员在需要时更容易关闭自动完成功能,而不是强迫我们使用像这样的黑客
答3:
与HuntsBot一起,探索全球自由职业机会–huntsbot.com
大多数主要浏览器和密码管理器(正确的,恕我直言)现在忽略 autocomplete=off。
为什么?许多银行和其他“高安全性”网站“出于安全目的”在其登录页面中添加了 autocomplete=off,但这实际上降低了安全性,因为它会导致人们在这些高安全性网站上更改密码以便于记忆(从而破解) 因为自动完成功能被破坏了。
很久以前,大多数密码管理器开始忽略 autocomplete=off,现在浏览器开始只对用户名/密码输入做同样的事情。
不幸的是,自动完成实现中的错误将用户名和/或密码信息插入到不适当的表单字段中,导致表单验证错误,或者更糟糕的是,意外地将用户名插入到用户故意留空的字段中。
网络开发人员要做什么?
如果您可以将所有密码字段单独保留在页面上,那将是一个很好的开始,因为似乎密码字段的存在是用户/密码自动完成的主要触发因素。否则,请阅读以下提示。
Safari 注意到有 2 个密码字段并在这种情况下禁用自动完成,假设它必须是更改密码表单,而不是登录表单。因此,请确保在您允许的任何表单中使用 2 个密码字段(新密码和确认新密码)
不幸的是,Chrome 34 会在看到密码字段时尝试使用用户/密码自动填充字段。这是一个非常糟糕的错误,希望他们会改变 Safari 的行为。但是,将此添加到表单顶部似乎会禁用密码自动填充:
我尚未彻底调查 IE 或 Firefox,但如果其他人在评论中有信息,我很乐意更新答案。
“在你的页面上添加这个似乎会禁用页面的自动填充:”你是什么意思?
@wutzebaer,Chrome 会注意到隐藏的密码字段并停止自动完成。据报道,这是为了防止网站在用户不注意的情况下窃取密码信息。
您的代码片段阻止 Chrome、Firefox、IE 8 和 IE 10 上的登录字段自动完成。没有测试 IE 11。好东西!只有简单的答案仍然有效。
您好,从 2022 年开始。我刚刚尝试过这个解决方案,它仍然适用于 Firefox 101.0.1,但不适用于 Chrome 102.0.5005.115
答4:
huntsbot.com提供全网独家一站式外包任务、远程工作、创意产品分享与订阅服务!
有时,即使 autocomplete=off 也不会阻止将凭据填写到错误的字段中,但不会阻止用户或昵称字段。
此解决方法是 apinstein’s post 关于浏览器行为的补充。
修复浏览器自动填充只读并在焦点上设置可写(单击和选项卡)
更新:
Mobile Safari 在字段中设置光标,但不显示虚拟键盘。新修复程序像以前一样工作,但它处理虚拟键盘:
现场演示https://jsfiddle.net/danielsuess/n0scguv6/
// 更新结束
因为浏览器自动将凭据填充到错误的文本字段!?
当有相同形式的密码字段时,我注意到 Chrome 和 Safari 上的这种奇怪行为。我猜浏览器会寻找一个密码字段来插入您保存的凭据。然后它自动填充(只是根据观察猜测)最近的文本输入字段,该字段出现在 DOM 中的密码字段之前。由于浏览器是最后一个实例,您无法控制它。
上面的这个只读修复对我有用。
huntsbot.com – 程序员副业首选,一站式外包任务、远程工作、创意产品分享订阅平台。
如果没有 javascript,那么整个表单都会失败。 -1
@JimmyKane 的关键是首先使用javascript添加属性(dsuess 在这里没有这样做,只是为了完整性而添加)。
@tmelson 我明白了,但为什么还要使用 js 来禁用?让我们避免使用 js 来进行本机可以改进的事情。不过,我再次同意你的看法。
13 年后,这仍然是最好的选择——对于我们这些使用 JQuery 的人来说,这里有一个快速修改:onfocus="$(this).attr('readonly',false);"
这不是解决方案。如果 JS 在页面中不起作用,是的,它会失败。而且,您做了一个鼠标事件,但许多用户在输入输入时不使用鼠标。
答5:
huntsbot.com聚合了超过10+全球外包任务平台的外包需求,寻找外包任务与机会变的简单与高效。
Chrome 的解决方案是在输入类型密码中添加 autocomplete=“new-password”。请检查下面的示例。
例子:
如果 Chrome 找到一个 type password 框,它总是会自动完成数据,这足以指示该框 autocomplete = “new-password”。
这对我很有效。
注意:使用 F12 确保您的更改生效。很多时候,浏览器将页面保存在缓存中,这给我一个不好的印象,它不起作用,但浏览器并没有真正带来变化。
一个优秀的自由职业者,应该有对需求敏感和精准需求捕获的能力,而huntsbot.com提供了这个机会
这在 Chrome 中也适用于其他类型的字段,而不仅仅是 type="password"。
我将它与密码、电子邮件和文本类型一起使用,并且有效。我只是这样使用它: autocomplete="new"
autocomplete="nope" name="pswd" 并在真实密码输入字段之前使用 。这对我有用。
这现在几乎适用于所有浏览器,而不仅仅是 Chrome:autocomplete#Browser_compatibility。
这是目前最好的答案。有关详细信息,请参阅本页末尾:developer.mozilla.org/en-US/docs/Web/Security/…
答6:
huntsbot.com全球7大洲远程工作机会,探索不一样的工作方式
这适用于 Internet Explorer 和 Mozilla Firefox。缺点是它不是 XHTML 标准。
我注意到将它添加到表单元素并不总是阻止它应用于表单中的单个输入。因此,最好将其直接放在输入元素上。
实际上@sholsinger,最好将它放在表单和输入元素本身上。这样你就涵盖了浏览器的所有非标准性。
遗憾的是,从 IE 11 开始,Microsoft 不再尊重 input type="password" 的这一点。希望没有其他浏览器选择删除此功能。
在 form 上设置 autocomplete="off" 是唯一适用于 Chrome 的方法。
答7:
huntsbot.com精选全球7大洲远程工作机会,涵盖各领域,帮助想要远程工作的数字游民们能更精准、更高效的找到对方。
正如其他人所说,答案是autocomplete=“off”。
但是,我认为值得说明为什么在某些情况下使用它是一个好主意,因为对此的一些答案和duplicate questions建议最好不要关闭它。
停止浏览器存储信用卡号码不应该留给用户。太多的用户甚至不会意识到这是一个问题。
在信用卡安全码字段上将其关闭尤为重要。如 this page 所述:
“永远不要存储安全码…它的价值取决于提供它的唯一方法是从实体信用卡中读取它的假设,证明提供它的人实际上持有卡。”
问题是,如果它是公共计算机(网吧、图书馆等),那么其他用户很容易窃取您的卡详细信息,甚至在您自己的计算机上,恶意网站也可能steal autocomplete data。
如果我去了一个网站,它在下拉菜单中记住了我的卡,我会很不高兴。我开始怀疑他们怎么会这么粗心。
更简单/更关键的情况。当我访问网站管理部分的用户页面时,它会尝试将他们的用户名和密码设置为我的管理员用户名和密码,但无法判断这不是登录表单。我想记住我的管理员密码,但这是一个严重错误,它试图将记住的用户名/密码应用于我随后编辑的任何用户。
答8:
huntsbot.com提供全网独家一站式外包任务、远程工作、创意产品分享与订阅服务!
始终有效的解决方案
我已经通过使用随机字符解决了与谷歌浏览器的无休止的斗争。当你总是用随机字符串渲染自动完成时,它永远不会记住任何东西。
希望它对其他人有所帮助。
2022 年更新:
Chrome 进行了这项改进:autocomplete=“new-password” 这将解决它,但我不确定 Chrome 是否会在一段时间后再次将其更改为不同的功能。
这效果更好。您可以添加一个小 JS,为每次页面加载生成一个随机代码,并将该代码添加到输入字段:函数 autoId(){ var autoId = ""; var dict = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"; for(var i=0; i<12; i++){ autoId += dict.charAt(Math.floor(Math.random() * dict.length)); } 返回自动识别码; } $('.autocompleteoff').attr('autocomplete', autoId());您可以将 autocompleteoff 类添加到所需的输入字段。
Chrome 已修复现在使用标准化的“关闭”
可悲的是,它比所谓的 chrome 标准效果更好
今天我发现Chrome会用“Off”覆盖随机字符串。我不敢相信 Chrome 开发人员做这个属性不好而且不受控制。为什么哦,我得到了。
autocomplete="off" 适用于 2022 年的 Firefox
答9:
打造属于自己的副业,开启自由职业之旅,从huntsbot.com开始!
我不得不乞求与那些说避免禁用自动完成的答案不同。
首先要提出的是,未在登录表单字段上明确禁用自动完成是 PCI-DSS 失败。此外,如果用户的本地计算机遭到破坏,那么任何自动完成数据都可以被攻击者轻易获得,因为它是以明文形式存储的。
可用性肯定存在争议,但是在哪些表单字段应该禁用自动完成功能和哪些不应该禁用时,存在一个非常好的平衡。
我刚刚注意到,当您使用 AutoComplete 填充文本输入时,IE 不会触发 onChange 事件。我们有几十个表单和一千多个 onChange 事件(输入验证、业务逻辑)分散在其中。最近我们将 IE 升级到了新版本,突然间奇怪的事情开始发生。幸运的是,我们正在运行一个 Intranet 应用程序,并且自动完成对我们来说不是 UX 问题,关闭它更容易。
如果用户的本地计算机受到威胁,他们就完蛋了。它可能安装了键盘记录器,可能添加了伪造的 SSL 根证书并通过虚假代理发送所有内容等。我有一个真正的理由禁用自动完成功能 - 当我以管理员身份登录并访问编辑用户页面时,它会分配该用户我的管理员用户名和密码。我需要防止这种行为。
浏览器供应商似乎在寻找自己的利益。保存的密码 = 用户锁定。而且自动完成的开/关太简单了——为什么不采用复杂的语义提示标准(html.spec.whatwg.org/multipage/…),顺便说一下,它允许浏览器从每个用户访问的站点收集有价值的语义数据?
我试图解决的具体用例是:他们已经登录。但现在他们将要访问更敏感的东西。我想展示一个让他们重新进行身份验证的对话,以防止他们走开抽烟并且坏人坐在他们的椅子上的可能性。尝试了几种技术来击败自动完成,但没有任何效果。现在我在想,也许,至少,使用旧的 'password = window.prompt(" Please re-enter your password")' 加上会话中的用户名,并尝试对其进行身份验证。
答10:
打造属于自己的副业,开启自由职业之旅,从huntsbot.com开始!
三个选项:
第一的:
第二:
第三(JavaScript代码):
$('input').attr('autocomplete', 'off');
第一个和第二个选项应该是一个选项,因为它因浏览器处理此问题的方式而异。
试过 $formElement.attr('autocomplete', 'off');它不起作用。
答11:
打造属于自己的副业,开启自由职业之旅,从huntsbot.com开始!
这对我有用。
我们也可以在文本、选择等其他控件中使用此策略
原文链接:https://www.huntsbot.com/qa/MQee/how-do-you-disable-browser-autocomplete-on-web-form-field-input-tags?lang=zh_CN&from=csdn
打造属于自己的副业,开启自由职业之旅,从huntsbot.com开始!