HTML5的type="password"仅提供前端掩码,不实现真正加密;密码安全需HTTPS传输、服务端强哈希存储及前后端协同防护。
HTML5 本身不提供密码字段的“加密显示”功能——密码输入框()只是默认隐藏明文,用圆点或星号掩码显示,数据在传输和存储时仍需后端或JS配合加密。所谓“加密显示”,本质是前端掩码 + 安全传输 + 合理存储的组合实践,不是单靠 HTML 标签就能完成的。
这是最基础且必须的步骤:浏览器会自动屏蔽键盘输入回显、禁用复制粘贴(部分浏览器)、防止被开发者工具轻易抓取明文(非绝对)。注意不要误用 type="text" 加 CSS 遮盖,这毫无安全性可言。
(text-security 非标准属性,不兼容,且不防审查元素)value 属性中预填密码(如 value="123456"),易被页面源码或日志泄露若需更严格的视觉控制(例如防止录屏/肩窥),可结合 JavaScript 实现动态掩码,但不能替代 HTTPS 和服务端加密:
input 事件,实时将输入值存入内存变量,同时清空 input.value 并显示统一字符(如 ●)autocomplete="off" 或更严格的 autocomplete="new-password")没有 HTTPS,所有前端“加密”都形同虚设——密码会以明文在网络中传输,中间人可直接截获。
https://
Strict-Transport-Security(HSTS),强制后续访问走 HTTPS
console.log() 中打印密码原文有人试图用 JavaScript 对密码做 MD5、SHA-256 再提交——这反而制造新风险:
type="password" 只是第一道门,关好后面的门(HTTPS、服务端哈希、权限控制)才真正可靠。