书签管家:Chrome 新标签页书签管理与端到端加密密码库
条评论Chrome 原生书签足够好用,但一旦把账号密码写进标题,或依赖浏览器账号同步明文凭据,安全边界就比较模糊。为此我做了一个 Manifest V3 扩展:书签管家——在新标签页管理原生书签,并提供标签、密码库,以及向 私人 Gitee / GitHub 仓库 的端到端加密同步。
仓库:https://gitee.com/doautumn/bookmarks(当前 v1.3.1)

设计目标
- 书签仍使用 Chrome 原生数据:增删改与网页收藏均走系统书签 API,不另建一套书签存储。
- 凭据与书签标题分离:账号、密码进入密码库,按 URL 关联,避免写在标题中。
- 多机同步仅传输密文:云端为 AES-GCM 载荷(
meta.json+payload.enc);主密码经 PBKDF2 派生密钥,不以明文长期落盘。 - 兼顾日常效率:登录页自动填充;可选 Touch ID / Windows Hello 解锁。
功能概览
| 模块 | 说明 |
|---|---|
| 工作台 | 新标签页时钟、Bing 搜索、最近打开、「常用」侧栏 |
| 书签管理 | 宫格 / 列表、分组树、搜索与标签、批量操作 |
| 密码库 | 按书签 URL 存储账号、密码、备注;支持清理孤儿凭据 |
| 自动填充 | 匹配登录页;唯一命中可静默填充,多账号时提供选择条 |
| 云端同步 | 私人仓库端到端加密;锁定期间禁止上传,避免空密码库覆盖远端 |
| 会话锁定 | 空闲锁定、手动锁定、关闭浏览器后再打开:书签仍可用,凭据需解锁 |

安装
- 打开
chrome://extensions,开启「开发者模式」 - 「加载已解压的扩展程序」,选择仓库根目录
- 打开新标签页,或通过工具栏图标进入
首次使用可选:从旧 Gist 迁移、全新初始化、连接已有仓库。Token 建议仅授予该私有仓库所需的最小权限。
同步与锁定
若在锁定状态下仍用空密码库加密上传,会覆盖远端已有数据。当前策略如下:
| 状态 | 书签 | 密码库 / 自动填充 | 云端上传 |
|---|---|---|---|
| 已解锁 | 可用 | 可用 | 书签变更防抖上传;支持手动推拉 |
| 锁定 / 刚重启浏览器 | 可用 | 需先解锁 | 不上传 |
锁定期间仍可收藏网页,变更保留在本机 Chrome 书签中。解锁后的同步流程:
- 拉取远端密码库与标签(不覆盖本机书签树,避免冲掉锁定期间的本地变更)
- 仅当本机书签与远端不一致时上传,减少无意义的仓库提交
- 拉取失败时仍会保守上传一次,避免本地积压长期无法上云
空闲锁定由后台 chrome.alarms 约每分钟检查一次;锁定后,其它已打开的扩展页会同步清除内存中的明文凭据。
生物识别与 PRF
启用生物识别后,扩展通过 WebAuthn 平台认证器唤起系统指纹 / Windows Hello 对话框。
网站通行密钥(如 GitHub 登录)与密码库解锁对 WebAuthn 的需求并不相同:
- 通行密钥登录:完成用户验证即可
- 密码库解锁:还需要从认证器取得可用于解密封装密钥的材料,依赖 WebAuthn PRF 扩展
部分环境(例如 Chrome 本机档案中的 Touch ID)可以完成指纹验证,但不提供 PRF。因此实现分为两档:
- PRF 模式:由认证器派生密钥,包装密码库 AES 密钥
- 门控模式:指纹仅作身份验证;包装密钥仍保存在本机扩展存储中。可降低误触解锁的风险,但无法对抗直接读取本机 Chrome 配置目录的攻击面
修改主密码后,生物识别会关闭,需要重新启用。

安全边界
适用场景:私有仓库 + 可信本机环境,并建议开启系统磁盘加密与自动锁屏。
它不是「整盘失守仍可保全密码库」一类产品;更接近「私人加密备份 + 会话内可用」的书签与凭据工具。
主要约定:
- 主密码经 PBKDF2 派生,不以明文保存
- 派生密钥默认仅存在于
chrome.storage.session;关闭浏览器后需重新解锁 - 本机密码库以密文缓存落盘;云端仅保存加密载荷
- Token、主密码及解密后的备份均不应提交到 Git
- 自动填充仍会将密码写入页面 DOM,需接受登录页 XSS 等通用风险
- 锁定状态下仍可能保留「哪些 URL 存有凭据」一类元数据(用于界面提示)
技术结构
无构建步骤的纯前端扩展。修改代码后,在 chrome://extensions 重新加载扩展,并硬刷新标签页即可。
1 | manifest.json |
权限包括:bookmarks、storage、tabs、alarms,以及对 Gitee / GitHub API 与自动填充页面的主机访问权限。
小结
书签管家优先保证原生书签体验,再在密码库与同步上采用「私有仓库 + 会话锁定」的收口方式。若需要类似能力,可直接从仓库克隆使用或二次修改。
欢迎在仓库提交 Issue;文中截图会在后续补齐。
