阻止用户将内容粘贴到输入字段中

有些网站声称允许用户粘贴密码会降低安全性。 不过,密码粘贴功能实际上支持使用密码管理工具,因而可以提高安全性。

密码管理工具通常会为用户生成安全系数高的密码并妥善存储这些密码,然后在用户需要登录时自动将这些密码粘贴到密码字段中。相较于强制要求用户必须输入足够简短且容易记住的密码,这种方法通常更安全。

一般来说,不应阻止用户将内容粘贴到 <input> 元素中。

此 Lighthouse 审核如何失败

Lighthouse 标记阻止用户将内容粘贴到非只读输入字段的代码:

Lighthouse 审核显示页面阻止用户将内容粘贴到密码字段中

Lighthouse 会收集所有非只读的 <input> 元素,将一些文本粘贴到每个元素中,然后验证自定义事件处理脚本是否阻止了 paste 事件。

您还可以阻止在 paste 事件监听器之外执行粘贴操作。Lighthouse 未检测到这种情况。

如何允许粘贴到密码字段中

找到阻止粘贴的代码

若要快速查找和检查阻止粘贴的代码,请执行以下操作:

  1. 展开 Event Listener Breakpoints 窗格。
  2. 展开剪贴板列表。
  3. 选中 paste 复选框。
  4. 将一些文本粘贴到您网页上的密码字段中。
  5. 开发者工具应该会在相关 paste 事件监听器中的第一行代码暂停。

移除阻止粘贴的代码

问题的根源通常是在与密码输入元素关联的 paste 事件监听器中调用 preventDefault()

let input = document.querySelector('input');

input.addEventListener('paste', (e) => {
  e.preventDefault(); // This is what prevents pasting.
});

如果您只是要监听粘贴事件以抢占它们,请移除整个事件监听器。

资源

禁止用户将内容粘贴到输入字段中审核的源代码