浏览器里那串圆点,网页从来就不是隐藏真正的密码。它只是密码输入框的一个遮罩,把字符替换成“●”。网页网页本身拿到的隐藏是明文,只是密码不给你看。
想看到它,网页最简单的隐藏办法是改输入框的 type 属性。按 F12 打开开发者工具,密码用元素选择器点中那个密码框,网页你会看到类似 <input type="password"> 的隐藏代码。双击 password,密码改成 text,网页回车。隐藏圆点立刻变回字符。密码这招在 Chrome、Edge、Firefox 上都管用,不需要装任何插件。
我试过一个老旧的教务系统。登录页的密码框改完 type 之后,密码直接露出来,但旁边还有个“记住密码”的复选框。那个复选框的 value 里居然存着上一任用户的密码,明文。这不是前端的问题,是后端把密码回填到了 HTML 里。这种系统现在少了,但没绝迹。
改 type 只能看到你自己输入的内容。如果输入框是空的,或者页面加载时自动填充了圆点,你改完 type 可能什么也看不到。这时候要看浏览器有没有“保存密码”。Chrome 的密码管理器在 chrome://settings/passwords,找到对应网站,点眼睛图标,输入 Windows 开机密码就能显示。Firefox 在 about:logins,类似。这些密码是加密存储的,但浏览器自己会解密给你看。
有人问,能不能直接看网页源代码里的密码?能,但通常没用。前端代码里的密码要么是哈希,要么是占位符。我见过一个后台登录页,源码里写着 value="admin123",那是开发人员图省事硬编码的。这种页面现在基本绝迹,但内网系统、老旧的 CMS、学校机房的管理界面里偶尔还能撞见。你右键“查看网页源代码”,搜 type="password",看它有没有 value 属性。有的话,那就是明文。
还有一种情况:密码框被 JavaScript 动态设置了值。你改 type 没用,因为值不在 HTML 里,在内存里。打开控制台,输入 document.querySelector('input[type=password]').value,回车。如果返回一个字符串,那就是明文。如果返回空,说明密码没填进去,或者被清除了。
这些方法都只能看到“当前页面上的密码”。如果网站用了 iframe 嵌套,或者密码框在 shadow DOM 里,选择器要调整。Chrome 的开发者工具可以右键元素选“Copy selector”,拿到准确路径再改。我遇到过用 React 写的登录页,密码框的 type 是动态绑定的,改 HTML 属性会被框架覆盖。这时候得在控制台里直接操作 DOM,或者用 Object.defineProperty 拦截。麻烦,但能办到。
说句实在的,查看网页隐藏密码这件事,九成场景是合法的:你忘了自己设的密码,浏览器帮你存了,你想看一眼。剩下那一成,是看别人的密码。那就不只是技术问题了。浏览器把密码框做成圆点,本来就不是为了安全,是为了防肩窥。真正的安全靠的是 HTTPS、哈希存储、双因素认证。前端那层遮罩,挡不住任何人。
最后提一个细节:有些网站会在密码框上监听 input 事件,你一改 type 它就还原,或者直接清空。遇到这种,先禁用 JavaScript,再改 type。Chrome 控制台右上角有个齿轮图标,或者按 F1,找到“Disable JavaScript”勾上。页面会重新加载,但密码框可能已经填好了。这时候再改 type,它就管不着了。
密码就在那儿,只是被一层 CSS 和 HTML 属性盖住了。掀开它,不需要什么高深技术。