协慌网

登录 贡献 社区

如何在 Web 表单字段 / 输入标记上禁用浏览器自动完成?

如何在主要浏览器中禁用特定input (或form field )的autocomplete

答案

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 开发人员?

  • 如果您可以自己保留页面上的所有密码字段,那么这是一个很好的开始,因为密码字段的存在似乎是用户 / 通行证自动完成启动的主要触发器。否则,请阅读以下提示。
  • Safari注意到在这种情况下有 2 个密码字段并禁用自动完成,假设它必须是更改密码表单,而不是登录表单。因此,请确保为您允许的任何表单使用 2 个密码字段(新的并确认新的)
  • 不幸的是, Chrome 34 会在看到密码字段时尝试使用 user / pass 自动填充字段。这是一个非常糟糕的错误,希望它们会改变 Safari 的行为。但是,将此添加到表单顶部似乎禁用密码自动填充:

    <input type="text" style="display:none">
    <input type="password" style="display:none">

我还没有彻底调查 IE 或 Firefox,但如果其他人在评论中有信息,我将很乐意更新答案。