你怎么禁用 autocomplete
在主要的浏览器中为特定的 input
(要么 form field
)?
你怎么禁用 autocomplete
在主要的浏览器中为特定的 input
(要么 form field
)?
Firefox 30忽略了 autocomplete="off"
对于密码,选择提示用户而不是密码是否应存储在客户端上。请注意以下内容 评论 从2014年5月5日起:
- 密码管理器 总是 提示是否要保存密码。未经用户许可,不会保存密码。
- 在IE和Chrome之后,我们是第三个实现此更改的浏览器。
根据 Mozilla开发人员文档 表单元素属性 autocomplete
防止表单数据在旧版浏览器中缓存。
<input type="text" name="foo" autocomplete="off" />
此外 autocomplete=off
您也可以通过生成页面的代码随机化您的表单字段名称,也许可以通过在名称末尾添加一些特定于会话的字符串。
提交表单后,您可以在服务器端处理它之前删除该部分。这将阻止Web浏览器查找您的字段的上下文,也可能有助于防止XSRF攻击,因为攻击者无法猜测表单提交的字段名称。
大多数主流浏览器和密码管理器(正确地,恕我直言)现在都忽略了 autocomplete=off
。
为什么?许多银行和其他“高安全性”网站增加了 autocomplete=off
到他们的登录页面“出于安全目的”但这实际上降低了安全性,因为它导致人们更改这些高安全性站点上的密码以便易于记忆(并因此破解),因为自动完成被破坏。
很久以前,大多数密码管理员开始忽视 autocomplete=off
,现在浏览器开始只为用户名/密码输入做同样的事情。
遗憾的是,自动完成实现中的错误会将用户名和/或密码信息插入到不适当的表单字段中,从而导致表单验证错误,或者更糟糕的是,意外地将用户名插入到用户有意留空的字段中。
什么是Web开发人员?
铬 不幸的是,34只要看到密码字段,就会尝试使用user / pass自动填充字段。这是一个非常糟糕的错误,希望它们会改变Safari的行为。但是,将此添加到表单顶部似乎禁用密码自动填充:
<input type="text" style="display:none">
<input type="password" style="display:none">
我还没有彻底调查IE或Firefox,但如果其他人在评论中有信息,我将很乐意更新答案。
有时 甚至自动完成=关闭 将 不要阻止填补 凭证到错误的字段,但不是用户或昵称字段。
此解决方法是apinstein关于浏览器行为的帖子的补充。
将浏览器自动填充修复为只读并在焦点上设置可写(单击和选项卡)
<input type="password" readonly
onfocus="this.removeAttribute('readonly');"/>
更新: Mobile Safari将光标设置在字段中,但不显示虚拟键盘。 New Fix像以前一样工作,但处理虚拟键盘:
<input id="email" readonly type="email" onfocus="if (this.hasAttribute('readonly')) {
this.removeAttribute('readonly');
// fix for mobile safari to show virtual keyboard
this.blur(); this.focus(); }" />
现场演示 https://jsfiddle.net/danielsuess/n0scguv6/
// UpdateEnd
因为浏览器自动将凭据填充到错误的文本字段!?
当有密码字段时,我注意到Chrome和Safari上有这种奇怪的行为 相同的形式。 我猜,浏览器会查找密码字段以插入您保存的凭据。然后它会自动填充(只是因为观察而猜)最近的textlike-input字段,它出现在DOM中的密码字段之前。由于浏览器是最后一个实例,您无法控制它,
上面的readonly-fix对我有用。
<form name="form1" id="form1" method="post"
autocomplete="off" action="http://www.example.com/form.cgi">
这将适用于Internet Explorer和Mozilla FireFox,缺点是它不是XHTML标准。
Chrome的解决方案是添加 autocomplete="new-password"
输入类型密码。
例:
<form name="myForm"" method="post">
<input name="user" type="text" />
<input name="pass" type="password" autocomplete="new-password" />
<input type="submit">
</form>
如果找到一个框,Chrome始终会自动填充数据 输入密码,足以指明那个盒子 autocomplete = "new-password"
。
这对我很有用。
注意:请确保F12您的更改生效,很多时候浏览器将页面保存在缓存中,这给我的印象是它不起作用,但浏览器实际上没有带来更改。
正如其他人所说,答案是 autocomplete="off"
但是,我认为这值得说明 为什么 在某些情况下使用它作为对此的一些答案是一个好主意 重复 问题表明最好不要关掉它。
停止存储信用卡号的浏览器不应留给用户。太多的用户甚至都不会意识到这是一个问题。
在信用卡安全代码的字段上关闭它尤为重要。如 这一页 状态:
“永远不要存储安全代码......它的价值取决于这样一种假设:提供它的唯一方法是从实体信用卡中读取它,证明提供它的人实际上持有了这张卡。”
问题是,如果它是一台公共计算机(网吧,图书馆等),那么其他用户就可以轻易窃取您的卡详细信息,甚至在您自己的机器上也可以使用恶意网站 窃取自动填充数据。
我不得不乞求与那些避免禁用自动完成的答案不同。
提出的第一件事是,在登录表单字段上未明确禁用自动完成是PCI-DSS失败。此外,如果用户的本地计算机受到威胁,则攻击者可以轻易获得任何自动完成数据,因为它以明文形式存储。
肯定存在可用性的争论,但是当涉及到哪些表单字段应该禁用自动完成时哪些不应该存在时,存在非常好的平衡。
三种选择: 第一:
<input type='text' autocomplete='off' />
第二:
<form action='' autocomplete='off'>
第三(javascript代码):
$('input').attr('autocomplete', 'off');
我一直在尝试无穷无尽的解决方案,然后我发现了这个:
代替 autocomplete="off"
只是简单地使用 autocomplete="false"
就这么简单,它就像谷歌Chrome中的魅力一样!