HTML5的type=”password”仅实现字符遮掩,不加密、不防抓包、不验证;真正安全依赖HTTPS传输、服务端强哈希存储及前后端协同校验。
HTML5 本身不提供“密码安全机制”,type="password" 只是前端遮掩输入,不加密、不验证、不防抓包——所有靠 单独实现的“保护”都是假象。
为什么 type="password" 根本不安全
它只做一件事:把输入字符显示为 ●●●,其他什么都没做。真实值仍以明文存在 DOM 中,可被 JS 任意读取;表单提交时若没走 HTTPS,密码会裸奔到服务器;服务端若没校验或哈希存储,数据库一泄露就全完。
-
浏览器开发者工具里直接
document.querySelector('input[type=password]').value就能拿到明文 - 禁用 JS 或绕过前端校验(如删掉
required、改maxlength)毫无门槛 -
autocomplete="off"在现代浏览器中基本失效,Chrome 甚至会忽略它并自动填充
真正起作用的安全动作在后端和传输层
前端唯一能做的,是配合后端建立合理流程。重点不是“怎么写 HTML”,而是“怎么不让密码裸露在链路中”:
- 必须启用 HTTPS:否则任何前端防护都形同虚设,中间人可截获 POST body 中的明文密码
- 服务端接收后立即用强哈希(如
bcrypt、Argon2)加盐处理,绝不可存明文或简单 MD5/SHA1 - 登录接口需防暴力:限制尝试次数、加验证码、记录异常 IP
- 敏感操作(如改密、转账)应二次验证,不能仅依赖登录态
前端能做的有限但关键的配合项
不是“设密码”,而是“减少密码暴露面”: