有些网站声称,允许用户粘贴密码会降低安全性。 不过,由于允许粘贴密码,因此实际上提高了安全性,因为这样可以使用密码管理工具。
密码管理工具通常会为用户生成安全系数高的密码,将其安全地存储起来,然后在用户每次需要登录时自动将其粘贴到密码字段中。与强制用户输入足够短且易于记住的密码相比,这种方法通常更安全。
在一般情况下,不应阻止用户粘贴到 <input>
元素中。
此 Lighthouse 审核失败的原因
Lighthouse 会标记阻止用户将内容粘贴到非只读输入字段中的代码:
Lighthouse 会收集所有非只读 <input>
元素,将一些文本粘贴到每个元素中,然后验证自定义事件处理脚本是否阻止了 paste
事件。
您还可以阻止在 paste
事件监听器之外粘贴内容。Lighthouse 无法检测到这种情况。
如何允许在密码字段中粘贴内容
找到导致无法粘贴的代码
如需快速查找并检查导致无法粘贴的代码,请执行以下操作:
- 展开 Event Listener Breakpoints 窗格。
- 展开剪贴板列表。
- 选中
paste
复选框。 - 将一些文本粘贴到网页上的密码字段中。
- DevTools 应在相关
paste
事件监听器中的第一个代码行暂停。
移除阻止粘贴的代码
问题的根源通常是与密码输入元素关联的 paste
事件监听器中对 preventDefault()
的调用:
let input = document.querySelector('input');
input.addEventListener('paste', (e) => {
e.preventDefault(); // This is what prevents pasting.
});
如果您只是监听粘贴事件以抢先处理它们,请移除整个事件监听器。