
同一个后台系统,我有四套账号:dev、test、staging、prod。域名分别是 admin-dev.example.com、admin-test.example.com、admin.example.com……不对,其实很多团队的多环境是同一主域加子域,或者干脆是 192.168.1.10:8080 这种地址。
问题来了:Chrome 自带的密码管理器把这些环境的账号混在一起,每次填充都赌运气;Bitwarden 这类云端工具倒是能按 URL 精确匹配,但它只”填充”——填完之后,协议勾选框要自己点,登录按钮要自己点,两步验证码还要切手机去抄。
这些不大不小的摩擦,日复一日地发生在每个开发者、测试工程师的工作流里。这就是我做 Account Password Helper(账号密码管理助手) 的起点:一款零云端、开源、专为多环境登录场景设计的本地密码管理器。
目前它已上架 Chrome 应用商店,完全免费,代码以 GPL-3.0 协议开源。这篇文章讲讲它解决什么问题、怎么解决的,以及它刻意不做什么。
现有密码管理器的三个缺口
在动手之前,我把市面上的方案都试了一遍,发现三个共性缺口:
缺口一:多环境账号隔离。 密码管理器靠域名匹配决定”在这个页面给你看哪些账号”。大多数工具做的是模糊匹配——主域相同就算命中。对普通用户这是贴心,对开发者这是灾难:测试环境的账号被填进生产环境的登录框,轻则登录失败,重则误操作。我要的是精确匹配:规范化后的 host 完全一致的条目才出现;localhost / 127.0.0.1 这类本地开发域名另走一套规则——页面不带端口时放行全部方便联调,带端口时只出现端口一致的条目(库里没写端口的通用条目始终保留)。
缺口二:登录不是填充。 一次完整的登录动作 = 填用户名 + 填密码 + 勾选协议 + 点登录按钮,如果有两步验证还要再补一个验证码。现有工具只帮你完成前两步。Account Password Helper 的”一键登录”用一个快捷键 Ctrl+Shift+F(Mac 上是 Cmd+Shift+F)串起整条链:自动填充用户名与密码,并自动勾选离输入框最近的协议复选框;链条末端那次”点击登录”由设置里的「自动触发登录」开关决定(默认关闭,避免在你没准备好的页面上误提交),不想常开的话,侧边栏每条账号上还有一个显式的「填充并登录」按钮可按需触发。如果是 GitHub 那种”先输密码、下一步输验证码”的两步登录,页面会出现一个 TOTP 活码胶囊,下一步直接把当前验证码填进去。
缺口三:隐私与信任。 云端密码管理器再优秀,你也要把全部凭证托付给一家公司的服务器和它的商业承诺。对一部分用户(包括我自己),”数据物理上不离开浏览器”不是加分项,而是前提条件。
核心功能走读
围绕这三个缺口,产品的功能版图长这样:
一键登录与四种填充方式
填充这件事看似简单,实际上现代前端框架给自动填充挖了不少坑:React 受控组件会忽略直接改 value 的赋值、各种自定义输入组件不响应标准事件。插件的填充器按顺序尝试三档降级——原生 setter 触发 input 事件、execCommand、模拟键盘事件——逐级回退,兼容主流框架。
填充入口有四层:内联填充(默认,输入框获焦后出现钥匙图标,点一下弹出账号下拉)、侧边栏填充、输入框右键菜单填充(右键即可填充用户名 / 密码 / 两步验证码,或在注册时直接生成并填充一个强密码——后者不要求先解锁会话)、快捷键一键填充(Ctrl+Shift+F,在偏好设置开启「自动触发登录」后连登录按钮一起点掉)。会话锁定时不弹系统通知了事,而是就地展开一个带「解锁后填充」引导的锁定卡片;真填不成,页面内提示条 + 桌面通知 + 工具栏角标三层反馈依次兜底,不会静默失败。
多环境隔离的域名匹配
匹配规则刻意做得”不智能”:规范化后的 hostname 全等才命中。主域名解析内部维护了一份 27 条的两段式 ccTLD 列表(com.cn、co.uk 这类,覆盖 CN/UK/HK/TW/JP/KR/AU/SG),避免把 example.com.cn 错误截断成 com.cn;列表未收录的国家则由”末段是两字母国家码 + 二级是 com/co/net 等常见注册标签”的启发式兜底,把 example.com.br 也算成三段主域。这套规则同时约束侧边栏列表、内联下拉和自动保存捕获,保证任何一个入口都不会把 prod 账号递到 test 页面上。
内置 TOTP,不是玩具
TOTP(RFC 6238)验证码在本地生成,列表里是实时活码加倒计时。添加密钥支持两种姿势:扫描网页上的二维码(内置 jsQR 解码,不发任何外部请求),或者上传图片。配合前面说的”两步登录接力”,手机验证器在这个工作流里可以退休了。
离线安全体检
一键给所有密码做体检,产出 0–100 综合评分。评分由四个加权维度构成:重复复用(权重 35)、弱密码(25)、疑似泄露(20)、长期未更新(20),按 100 - 35×复用占比 - 25×弱口令占比 - 20×泄露占比 - 20×陈旧占比 计算;「未开启两步验证」会统计出来单独列作风险项,但不进评分。弱密码与疑似泄露都靠本地字典判定——内置弱口令清单加一份离线的近千条常见泄露密码清单(top1000.json,999 条),不发 HIBP 之类的联网查询。这是”体检工具本身不能成为数据出口”的底线。
迁移与备份
导入端自动识别 Chrome、LastPass、Bitwarden、1Password 的导出格式,接受 CSV 与 JSON 两类文件(Excel 表格请先「另存为 CSV」再导入),中英文列名自动映射,30 秒搬家。备份端有三重:加密备份文件(.aph,AES-256-GCM 整库加密,导入时可解密预览)、邮箱备份、定时备份提醒。删除有 30 天回收站兜底,改错密码可以从密码历史快照里恢复——每条默认保留 3 份,可在 1–10 份之间调整。
体验层
6 套色彩主题、中英文双语界面即时切换(扩展页和注入页面的 UI 同步生效)、网站图标直接读 Chrome 本地图标缓存(零外部请求)、密码生成器双模式(随机字符 + 助记词组,词库是内置的 3080 词英文清单,默认取 4 词、约 46 位熵)。登录页上还有一个可拖拽的悬浮填充按钮(能吸附到屏幕边缘、透明度可调),工具栏 Popup 则把管理页、侧边栏、直接填充、锁定会话收在同一屏。
还有一层不太起眼的日常细节:侧边栏顶栏的「+」可以就地快速添加本站账号(网址自动预填当前域名);搜索框右侧一个图标在「本站 / 全站」之间切换,全站模式下外站账号一键在新标签页打开,而不会被递到当前页去填充;密码列表每行的「查看详情」用只读抽屉展示完整备注与密码修改历史,不必为了看一眼而进入编辑态;主密码输入框实时检测大写锁定,大小写误输不再被当成「密码错误」;自动保存弹窗则会在密码强度偏弱或被多个账号复用时给出内联提示——只提醒,不拦你保存。
安全模型:敢开源,才敢谈信任
密码管理器的信任不能靠口号,只能靠可验证的设计。Account Password Helper 的安全模型有几条硬边界:
- 本地优先,出站只有版本检查。 没有后端、没有账号体系、没有遥测与分析,凭证只落在你浏览器的本地存储里。扩展确实申请了
<all_urls>的 host 权限,但它服务于内容脚本在任意站点上定位登录表单,不用于发请求;真正出网的只有一处:约每 6 小时一次的版本更新检查,向 Chrome 商店页面发一个no-corsHEAD 探测可达性、再向 GitHub Releases 公开接口读一次版本号,匿名、不带凭据、不带任何账号数据。 - 字段级加密。 条目的用户名、密码、URL、备注、TOTP 密钥全部单独加密,存储层看到的全是密文。
- 标准算法,不发明轮子。 PBKDF2-SHA256(600,000 次迭代)派生密钥,AES-256-GCM 认证加密,全部走浏览器原生 Web Crypto API。实现细节在这篇 Web Crypto 加密实战里:60 万次迭代怎么派生密钥、IV 怎么生成、密文落成什么格式。
- 会话有生命周期。 默认 24 小时有效期;闲置自动锁定(跟随系统锁屏)与浏览器重启锁定都是可选项、默认关闭;手动一键锁定随时可用。锁定时内存中的密钥句柄与解密快照立即清除。
- 代码全开源(GPL-3.0)。 加密那几行代码、权限声明、每一处网络调用,都可以自己读。2994 项自动化测试覆盖加密、会话、存储与消息路由等关键路径(跑在本地、提交前钩子里,也会在每次 push 与 PR 的仓库 CI 中自动执行)。
同时也要把话说在前面:这款工具的定位是开发、测试与日常登录场景,不建议在任何浏览器扩展里存放银行、支付类高敏感凭证;主密码遗忘无法找回,请善用加密备份。诚实的边界声明,是安全产品该有的样子。
写给谁

- 开发者:多环境账号隔离 + 一键登录,每天少点几十次鼠标;
- 测试工程师:快速切换测试账号,跨环境效率翻倍;
- 隐私敏感用户:无云端服务、免注册、免订阅,密码数据只存在你的浏览器里;
- 普通用户:告别记密码,TOTP 和密码放在一起,强密码一键生成。
最后
这个项目从 2026 年 5 月的 1.0 走到现在的 3.9,每个版本都是从真实使用中长出来的。它不打算成为”又一个 Bitwarden”,而是把”开发者多环境登录”这一个场景做到极致顺手,同时把隐私底线焊死在架构里。
如果你也受够了混在一起的测试账号和切来切去的手机验证码,欢迎试试:
- Chrome 应用商店一键安装(自动更新)
- GitHub 仓库(源码 / Releases 下载 / Issue 反馈),顺手点个 Star 是对开源最大的支持
- 在线演示与双语 FAQ
下一篇聊的是让 Chrome 侧边栏 1 秒内打开的完整工程实现——Service Worker 保活与预热,那是 Manifest V3 时代每个扩展开发者都会踩的坑。
FAQ · 常见问题
常见问题
多环境的账号是怎么被隔开的?
匹配口径刻意做得不智能:规范化后的 hostname 全等才命中。`localhost` / `127.0.0.1` 另走一套规则,页面不带端口时放行全部方便联调,带端口时只出现端口一致的条目。主域解析里维护了 27 条两段式 ccTLD(`com.cn`、`co.uk` 这类),避免把 `example.com.cn` 错截成 `com.cn`。
一键登录会不会顺手把表单提交掉?
填充链用 `Ctrl+Shift+F`(Mac 上是 `Cmd+Shift+F`)串起来:自动填用户名和密码,并勾掉离输入框最近的协议复选框;最后那次点击登录由设置里的「自动触发登录」决定,默认关闭,不想常开还可以按侧边栏每条账号上的「填充并登录」。GitHub 那种两步登录会在页面给出 TOTP 活码胶囊,下一步直接填。
密码存在哪儿,用的是哪套加密?
没有后端、没有账号体系、没有遥测,用户名、密码、URL、备注、TOTP 密钥逐字段加密后只落在浏览器本地存储。密钥由 PBKDF2-SHA256 配 600,000 次迭代派生,加密是 AES-256-GCM,全部走浏览器原生 Web Crypto API;代码以 GPL-3.0 开源,另有 2994 项自动化测试。
End of article · 读完这一篇
- 实际用时
- —
- 章节覆盖
- —
- 约读字数
- —
微信支付
支付宝