You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

浏览器忽略autocomplete="off"时,如何仅禁用改密表单自动完成?

确实,现在主流浏览器都不再理会普通的autocomplete="off"了,毕竟强制禁用自动填充反而可能让用户重复使用弱密码,反而不安全。不过你要只禁用修改密码表单的自动填充,同时不影响登录表单,其实有专门的解决方案~

针对修改密码表单禁用自动完成的可行方案

方法一:使用浏览器认可的专属autocomplete属性值

现在浏览器支持针对密码场景的特定autocomplete取值,专门用来区分登录和修改密码的字段,既能满足你的需求,又符合浏览器的安全策略:

  • 旧密码输入框:设置autocomplete="current-password"——这个值告诉浏览器,这是用户当前正在使用的密码,浏览器不会自动填充存储的密码到这里
  • 新密码输入框:设置autocomplete="new-password"——这个值会让浏览器跳过自动填充已有密码,部分浏览器可能会提示生成强密码(如果不需要这个提示,后面还有补充方案)

修改你的简化代码示例如下:

<!DOCTYPE html>
<html>
<body>
<form action="?page=change_pass" method="POST">
  <input type="password" name="oldPass" placeholder="请输入旧密码" autocomplete="current-password">
  <input type="password" name="newPass" placeholder="请输入新密码" autocomplete="new-password">
  <input type="password" name="confirmPass" placeholder="请确认新密码" autocomplete="new-password">
  <button type="submit">提交修改</button>
</form>
</body>
</html>

方法二:隐藏字段拦截法(应对极端兼容场景)

如果遇到某些浏览器依然有自动填充的问题,可以在表单最顶部添加一个隐藏的密码字段,用来“迷惑”浏览器的自动填充机制,让它把内容填充到隐藏字段里,不会影响实际的输入框:

<!DOCTYPE html>
<html>
<body>
<form action="?page=change_pass" method="POST">
  <!-- 隐藏的假密码字段,用于拦截自动填充 -->
  <input type="password" style="position: absolute; left: -9999px;" autocomplete="off">
  <input type="password" name="oldPass" placeholder="请输入旧密码" autocomplete="current-password">
  <input type="password" name="newPass" placeholder="请输入新密码" autocomplete="new-password">
  <input type="password" name="confirmPass" placeholder="请确认新密码" autocomplete="new-password">
  <button type="submit">提交修改</button>
</form>
</body>
</html>

这里用position: absolute; left: -9999px;而不是display: none;,是因为部分浏览器会忽略display: none;的字段,用绝对定位移出可视区域更稳妥。

额外提醒

  • 登录表单完全不需要改动,浏览器依然会正常自动填充用户名和密码——因为登录表单的字段通常会用autocomplete="username"autocomplete="current-password",浏览器会识别并正常工作。
  • 不要给整个修改密码表单设置autocomplete="off",针对单个字段设置专属值才是正确的做法。

内容的提问来源于stack exchange,提问作者JacopoStanchi

火山引擎 最新活动