某些情况下,用户需要浏览器不提供填充功能,尤其是登陆界面的密码填充。这时候我们就需要基于表单做一些特殊处理。这是非常麻烦的。
而 disableautofill.js 提供了这个功能。我们可以这样使用:
这个库做了以下几件事
- 替换type=“password”为type=“text”
- 用星号替换密码文本
- 在表单上添加一个属性 autocomplete=“off”
- 随机化属性 name 以防止 Google Chrome 记住您填写的内容
这也就意味着,当前界面表现的数据和真实输入的数据不一致。这时候如果我们用的前端框架,需要把表单项作为非受控组件组件。
后续发现了一个更加简单的方式。
- 替换type=“password”为type=“text” 并且使用字体文件 font-family
- 在表单上添加一个属性 autocomplete=“off”
这个方案其实也有问题:如果用户在 input text 中进行复制,是会把真实密码给复制出来的。这取决于用户是否能够接受。
事实上,字体文件甚至可以在一定程度上防御爬虫,例如旅游或者电商网站,涉及到金额等信息时候,完全可以通过数字字符集来进行变化处理,例如 json 数据或者 dom 结构上都会展示 1234(此处去除了货币格式),但事实上,用户实际看到的却是另外的数字(6754)。