禁止粘贴会阻碍密码管理器
别名: 密码不能粘贴 · disable paste password · password manager blocked
概念解释
有的密码格拦截粘贴,理由是「防止把密码抄来抄去」。今天绝大多数高熵密码来自密码管理器(password manager)或系统钥匙串,它们的主通道就是自动填充和粘贴。禁止粘贴把这条通道切断,人被逼回手工抄写一长串随机符,错误上升,管理器被弃用。它管的是值从哪进入槽,不是圆点会不会让人打错,也不是眼睛按钮。
机制
管理器生成的串故意难记、难打,收益建立在「人不必亲手键入」上。拦截 paste、beforeinput 或自动填充事件后,生成器还在,入口没了。人要么降低熵改用能记住的弱口令,要么在两个窗口之间用眼睛抄,抄写错误和肩窥同时变差。拦截往往还误伤「从自己的备忘录贴入」「从另一台设备传来」这些合法路径。安全收益并不成立:能粘贴的人已经能看见明文;真正的威胁是钓鱼页自己收密码,不是用户往正当登录格里贴。
怎么研究
装一台主流密码管理器,走注册、登录、改密。记录自动填充是否写入、粘贴是否被吃掉、用户是否改用短口令。自变量:拦截发生在键入事件、剪贴板 API 还是 autocomplete=off。因变量:管理器成功率、手工重打错误、改用弱口令的比例。NIST 数字身份指南把允许粘贴当作降低记忆负担的条件之一;实验上应把「能否使用管理器」当成可用性与安全的共同因变量,而不是只测手工键入。
边界
高安全隔离环境(部分内网、监考)会禁止一切剪贴板,那是环境策略,应在系统层做,不要只在一个 Web 输入框上装样子。一次性验证码有时被做成密码格并禁贴,会把短信自动填充也打掉。autocomplete=off 拦得了部分浏览器,拦不住所有管理器扩展,效果是「有的用户能填、有的不能」,比全面允许更不可预期。自定义控件若不是真正的 input type=password,管理器本来就找不到槽。
怎么落地
- 允许粘贴和浏览器 / 扩展的自动填充写入密码格,不要在
paste里preventDefault。 - 使用真实的密码输入类型和可识别的字段名,让管理器对得上槽。
- 改密流程同时允许从管理器填入旧密码和新密码,不要只放行其中一个。
- 验证:用管理器生成一条长随机密码并完成注册与下一次登录。任何一步要人手工抄写,或贴上之后槽仍是空的,就是通道被切断。