BindVault_README.md 20 KB

BindVault 功能 README

BindVault:个人数字身份与绑定关系管理系统。
用于管理手机号、邮箱、邮箱别名、第三方账号、域名、支付方式、订阅、恢复方式、风控事件,以及它们之间的绑定关系。

MVP 运行方式

当前 MVP 使用 SQLite 存储数据,由 server.py 同时提供静态页面和 API。

python3 server.py

然后访问:

http://localhost:8080

数据库默认写入:

data/bindvault.sqlite3

Docker Compose 运行:

docker compose up --build

1. 项目目标

BindVault 不是一个普通密码本,而是一个“个人数字资产台账”。

它要解决的问题是:

  • 我有哪些手机号、邮箱、域名、Apple ID、Google 账号、Claude/OpenAI 账号?
  • 某个手机号绑定了哪些平台?
  • 某个邮箱是否还能收验证码?
  • 某个 Apple ID / Google 账号使用了哪个邮箱、哪个手机号、哪个恢复方式?
  • 哪些账号被锁定、冻结、申诉中?
  • 哪些账号存在同手机号、多账号关联风险?
  • 哪些域名、订阅、礼品卡、支付方式快到期?
  • 账号出问题时,应该从哪里恢复?

核心价值:

资产清单化
绑定关系可追踪
风险状态可管理
恢复路径可查询
敏感凭据不明文存储

2. 设计原则

2.1 不做明文密码库

BindVault 不直接存储明文密码、2FA Secret、恢复码、银行卡完整信息。

这些敏感数据应该放在:

Vaultwarden
Bitwarden
KeePassXC
1Password
其他密码管理器

BindVault 只保存引用位置,例如:

Vaultwarden 条目名:Apple/apple01
KeePassXC 路径:Digital Assets/Apple/apple01

2.2 以“绑定关系”为核心

系统的核心不是账号本身,而是:

手机号 / 邮箱 / 域名 / 支付方式 / 设备
        ↓
绑定了哪些平台账号
        ↓
这些绑定在登录、验证、恢复、风控中分别扮演什么角色

2.3 先做个人单用户版本

MVP 阶段只需要支持个人使用,不需要复杂组织、多租户、审批流。

后续可扩展:

多用户
团队共享
资产分组
权限控制
审计日志
加密字段

3. 核心功能模块

3.1 仪表盘 Dashboard

首页展示个人数字资产概览。

需要展示

  • 手机号数量
  • 邮箱数量
  • 账号数量
  • 域名数量
  • 订阅数量
  • 风险事件数量
  • 已锁定账号数量
  • 申诉中账号数量
  • 即将到期资产数量
  • 高风险绑定数量

推荐卡片

总资产数
正常账号
异常账号
高风险绑定
即将到期域名
即将到期订阅
待处理事件

推荐图表

  • 平台账号分布:Apple / Google / OpenAI / Claude / Telegram / GitHub
  • 账号状态分布:正常 / 待验证 / 已锁定 / 已冻结 / 申诉中 / 已注销
  • 手机号绑定数量排行
  • 邮箱绑定数量排行
  • 最近风险事件时间线

3.2 手机号管理 Phone Numbers

用于维护所有个人手机号、虚拟号、海外号、备用号。

字段设计

字段 类型 说明
id string 唯一 ID
phone_number string 手机号,建议 E.164 格式,如 +86131xxxx0000
country_region string 国家/地区,如 CN、US、TR
carrier string 运营商,如 中国移动、联通、T-Mobile
owner string 实名人,如 本人、家人、公司
sim_type enum physical / esim / virtual
status enum available / inactive / cannot_receive_sms / released / high_risk
purpose string 用途说明
is_primary boolean 是否主力号码
can_receive_sms boolean 是否可收短信
can_receive_call boolean 是否可接电话
last_verified_at datetime 最近验证时间
expires_at datetime 到期时间,可选
notes text 备注

状态枚举

available              可用
inactive               停用
cannot_receive_sms     不可收短信
released               已释放
high_risk              高风险
unknown                未知

功能要求

  • 新增手机号
  • 编辑手机号
  • 删除手机号
  • 查看手机号绑定了哪些账号
  • 标记手机号是否还能收验证码
  • 标记手机号风险等级
  • 查询“绑定数量最多”的手机号
  • 查询“已不可收码但仍绑定账号”的手机号

3.3 邮箱管理 Emails

用于维护 Gmail、Outlook、QQ 邮箱、自定义域名邮箱、Cloudflare Email Routing 别名。

字段设计

字段 类型 说明
id string 唯一 ID
email string 邮箱地址
email_type enum gmail / outlook / qq / custom_domain / cloudflare_routing / alias
provider string Gmail、Cloudflare、腾讯企业邮等
domain string 所属域名,如 yunzhihui.ltd
forward_to string 转发目标邮箱
status enum available / cannot_receive / inactive / high_risk
can_receive_email boolean 是否可收信
can_send_email boolean 是否可发信
purpose string 用途
is_primary boolean 是否主邮箱
last_verified_at datetime 最近验证时间
notes text 备注

功能要求

  • 新增邮箱
  • 编辑邮箱
  • 删除邮箱
  • 查看邮箱绑定了哪些账号
  • 标记是否能收信
  • 维护转发目标
  • 标记 Cloudflare Routing 地址
  • 查询“一个邮箱绑定多个敏感账号”的风险

3.4 域名管理 Domains

用于维护个人域名及其 DNS、邮箱路由、到期信息。

字段设计

字段 类型 说明
id string 唯一 ID
domain string 域名
registrar string 注册商
dns_provider string DNS 服务商,如 Cloudflare
status enum active / expired / transferring / high_risk
expires_at datetime 到期时间
auto_renew boolean 是否自动续费
email_routing_enabled boolean 是否开启邮件路由
notes text 备注

功能要求

  • 新增域名
  • 编辑域名
  • 记录注册商和 DNS 服务商
  • 标记是否开启 Cloudflare Email Routing
  • 到期提醒
  • 查看该域名下有哪些邮箱别名
  • 查看该域名关联哪些账号

3.5 账号管理 Accounts

用于维护第三方平台账号。

字段设计

字段 类型 说明
id string 唯一 ID
platform string 平台,如 Apple、Google、OpenAI、Claude、GitHub
account_identifier string 登录账号,如邮箱、手机号、用户名
display_name string 展示名
region string 注册地区,如 CN、US、TR
status enum normal / pending_verify / locked / suspended / appealing / recovered / deleted / unusable
login_email_id string 登录邮箱 ID,关联 emails
login_phone_id string 登录手机号 ID,关联 phone_numbers
recovery_email_id string 恢复邮箱 ID
recovery_phone_id string 恢复手机号 ID
two_factor_type enum none / sms / email / authenticator / passkey / hardware_key
credential_ref string 密码管理器条目引用
recovery_ref string 恢复码/密保信息引用
registered_at datetime 注册时间
last_login_at datetime 最近登录时间
last_verified_at datetime 最近验证时间
notes text 备注

账号状态枚举

normal           正常
pending_verify   待验证
locked           已锁定
suspended        已冻结
appealing        申诉中
recovered        已恢复
deleted          已注销
unusable         不可用
unknown          未知

功能要求

  • 新增账号
  • 编辑账号
  • 删除账号
  • 按平台筛选
  • 按状态筛选
  • 查看账号绑定了哪些手机号、邮箱、域名、支付方式
  • 标记账号锁定、冻结、申诉中
  • 记录账号恢复方式
  • 记录密码管理器引用
  • 不允许明文保存密码

3.6 绑定关系管理 Bindings

这是系统最核心的模块。

一个账号可能绑定多个资产:

Apple ID
  - 登录邮箱:[email protected]
  - 受信任手机号:+86131xxxx0000
  - 恢复邮箱:[email protected]
  - 支付方式:土耳其礼品卡

一个资产也可能绑定多个账号:

+86131xxxx0000
  - Apple ID A:受信任手机号
  - Apple ID B:恢复手机号
  - Google A:2FA 手机号
  - Telegram:登录手机号

字段设计

字段 类型 说明
id string 唯一 ID
asset_type enum phone / email / domain / payment / device / subscription
asset_id string 对应资产 ID
account_id string 账号 ID
platform string 冗余字段,方便查询
binding_role enum login / recovery / trusted_phone / two_factor / notification / payment / owner
status enum active / removed / unknown / risky
bound_at datetime 绑定时间
unbound_at datetime 解绑时间
can_unbind boolean 是否可解绑
risk_level enum low / medium / high
notes text 备注

绑定角色枚举

login             登录方式
recovery          恢复方式
trusted_phone     受信任手机号
two_factor        二次验证
notification      通知邮箱/手机号
payment           支付方式
owner             所有者/实名关联
alias             邮箱别名
unknown           未知

功能要求

  • 新增绑定关系
  • 编辑绑定关系
  • 删除/标记已解绑
  • 查看某手机号绑定了哪些账号
  • 查看某邮箱绑定了哪些账号
  • 查看某账号绑定了哪些资产
  • 高风险检测:
    • 一个手机号绑定超过 N 个账号
    • 不可收短信手机号仍作为 2FA
    • 不可收信邮箱仍作为恢复邮箱
    • 已停用域名邮箱仍作为登录邮箱
    • 已锁定账号仍绑定主力手机号
  • 支持关系图展示,可选

3.7 支付方式 Payment Methods

用于维护礼品卡、虚拟卡、银行卡、PayPal、余额等。

字段设计

字段 类型 说明
id string 唯一 ID
payment_type enum gift_card / virtual_card / bank_card / paypal / balance / crypto
provider string Apple Gift Card、Wise、PayPal 等
region string 地区
masked_identifier string 脱敏标识,如 **** 1234
currency string 币种,如 USD、TRY、CNY
balance decimal 余额,可选
status enum active / inactive / expired / high_risk
expires_at datetime 到期时间
credential_ref string 凭据引用
notes text 备注

功能要求

  • 新增支付方式
  • 编辑支付方式
  • 记录余额
  • 记录地区
  • 记录绑定账号
  • 不保存完整卡号和 CVV
  • 支持到期提醒

3.8 订阅管理 Subscriptions

用于维护机场、云服务、Apple 订阅、域名、SaaS 等。

字段设计

字段 类型 说明
id string 唯一 ID
service_name string 服务名称
account_id string 关联账号
plan_name string 套餐
price decimal 价格
currency string 币种
billing_cycle enum monthly / quarterly / yearly / lifetime / custom
status enum active / cancelled / expired / trial
started_at datetime 开始时间
next_billing_at datetime 下次扣费时间
payment_method_id string 支付方式
notes text 备注

功能要求

  • 新增订阅
  • 编辑订阅
  • 到期提醒
  • 统计月度/年度订阅成本
  • 查看订阅关联的账号和支付方式

3.9 风险事件 Incidents

用于记录账号锁定、风控、申诉、验证码失败等事件。

字段设计

字段 类型 说明
id string 唯一 ID
account_id string 关联账号
platform string 平台
incident_type enum locked / suspended / verification_failed / payment_failed / login_failed / appeal / recovered
severity enum low / medium / high / critical
status enum open / processing / resolved / abandoned
occurred_at datetime 发生时间
resolved_at datetime 解决时间
description text 事件描述
action_taken text 已采取动作
next_action text 下一步动作
evidence_ref string 证据截图/文件引用
notes text 备注

功能要求

  • 新增事件
  • 编辑事件
  • 关闭事件
  • 关联账号
  • 展示账号事件时间线
  • 支持待处理事件列表
  • 支持按严重等级筛选

3.10 标签与分组 Tags / Groups

用于自定义分类。

示例标签

主力
备用
外区
中国大陆
土耳其区
美国区
高风险
已申诉
可收码
不可收码
Cloudflare Routing
Apple ID
OpenAI

功能要求

  • 给手机号、邮箱、账号、域名、支付方式、订阅打标签
  • 按标签筛选
  • 支持自定义标签颜色

4. 搜索与筛选

全局搜索必须支持:

手机号
邮箱
平台名称
账号登录名
域名
备注
标签

常用筛选:

平台 = Apple
状态 = 已锁定
地区 = 土耳其
绑定手机号 = +86xxx
邮箱类型 = Cloudflare Routing
风险等级 = 高
即将到期 = 30 天内

5. 风险检测规则

MVP 阶段先做静态规则检测。

规则 1:不可收码手机号仍作为 2FA

条件:

phone.status in [cannot_receive_sms, inactive, released]
AND binding.binding_role in [two_factor, trusted_phone, recovery]
AND binding.status = active

风险等级:High

规则 2:不可收信邮箱仍作为登录/恢复邮箱

条件:

email.status in [cannot_receive, inactive]
AND binding.binding_role in [login, recovery]
AND binding.status = active

风险等级:High

规则 3:一个手机号绑定太多账号

条件:

count(active bindings where asset_type = phone and asset_id = current_phone_id) >= threshold

默认阈值:5

风险等级:Medium

规则 4:已锁定账号仍使用主力手机号

条件:

account.status in [locked, suspended, unusable]
AND phone.is_primary = true
AND binding.status = active

风险等级:Medium

规则 5:域名快到期但仍承载邮箱别名

条件:

domain.expires_at <= now + 30 days
AND email.domain = domain.domain
AND email.status = available

风险等级:High


6. 数据导入导出

6.1 导入

支持 CSV 导入:

phone_numbers.csv
emails.csv
accounts.csv
bindings.csv
domains.csv
subscriptions.csv

导入时需要:

  • 字段映射
  • 重复检查
  • 预览导入结果
  • 错误行提示

6.2 导出

支持导出:

CSV
JSON
SQLite backup

导出时默认不包含敏感凭据,只导出台账信息。


7. 安全要求

7.1 禁止明文敏感信息

以下字段不应该明文保存:

密码
2FA Secret
恢复码
完整银行卡号
CVV
身份证号
短信验证码
邮箱验证码

7.2 敏感引用字段

可以保存引用:

credential_ref
recovery_ref
evidence_ref

例如:

Vaultwarden: Apple/apple01
KeePassXC: DigitalAssets/Apple/apple01
LocalFile: encrypted/screenshots/apple-lock-2026-05-24.png

7.3 本地优先

MVP 建议支持本地部署:

Docker Compose
SQLite / PostgreSQL
本地文件备份

7.4 备份提醒

系统应提示用户定期备份数据库。


8. 推荐技术栈

如果项目未指定技术栈,推荐:

前端

React
TypeScript
Vite
Tailwind CSS
shadcn/ui
React Router
TanStack Query

后端

二选一:

Node.js + NestJS / Express + Prisma

或:

Go + Gin/Fiber + GORM/sqlc

数据库

MVP:

SQLite

正式自托管:

PostgreSQL

部署

Docker
Docker Compose

9. 页面设计

9.1 页面列表

/dashboard
/phones
/emails
/domains
/accounts
/bindings
/payments
/subscriptions
/incidents
/tags
/settings

9.2 详情页要求

每类资产都应该有详情页。

例如手机号详情页:

手机号基础信息
状态
是否可收短信
绑定账号列表
风险提示
最近验证时间
备注
事件记录

账号详情页:

账号基础信息
登录邮箱
登录手机号
恢复邮箱
恢复手机号
2FA 类型
绑定关系图
风险事件时间线
密码管理器引用
备注

10. API 设计建议

10.1 REST API

GET    /api/phones
POST   /api/phones
GET    /api/phones/:id
PUT    /api/phones/:id
DELETE /api/phones/:id

GET    /api/emails
POST   /api/emails
GET    /api/emails/:id
PUT    /api/emails/:id
DELETE /api/emails/:id

GET    /api/accounts
POST   /api/accounts
GET    /api/accounts/:id
PUT    /api/accounts/:id
DELETE /api/accounts/:id

GET    /api/bindings
POST   /api/bindings
PUT    /api/bindings/:id
DELETE /api/bindings/:id

GET    /api/incidents
POST   /api/incidents
PUT    /api/incidents/:id
DELETE /api/incidents/:id

GET    /api/risks
POST   /api/import
GET    /api/export

10.2 查询参数

GET /api/accounts?platform=Apple&status=locked
GET /api/bindings?asset_type=phone&asset_id=xxx
GET /api/risks?level=high

11. 数据库表建议

phone_numbers
emails
domains
accounts
bindings
payment_methods
subscriptions
incidents
tags
tag_relations
risk_findings
attachments
settings

通用字段

所有表建议包含:

id
created_at
updated_at
deleted_at
notes

12. MVP 版本范围

第一版只做这些:

1. 手机号管理
2. 邮箱管理
3. 账号管理
4. 绑定关系管理
5. 风险事件管理
6. Dashboard 概览
7. 全局搜索
8. CSV 导入导出
9. Docker Compose 部署

暂时不做:

团队权限
复杂审批
浏览器插件
自动登录检测
短信自动读取
邮箱自动扫描
密码自动填充

13. 验收标准

13.1 基础验收

  • 可以新增手机号
  • 可以新增邮箱
  • 可以新增账号
  • 可以建立手机号/邮箱与账号之间的绑定关系
  • 可以在手机号详情页看到它绑定了哪些账号
  • 可以在账号详情页看到它绑定了哪些手机号和邮箱
  • 可以标记账号为已锁定、申诉中、已恢复
  • 可以记录风险事件
  • 可以搜索邮箱、手机号、平台账号

13.2 风险验收

  • 不可收码手机号仍作为 2FA 时,系统能提示高风险
  • 不可收信邮箱仍作为恢复邮箱时,系统能提示高风险
  • 一个手机号绑定超过阈值时,系统能提示中风险
  • 域名 30 天内到期且仍有邮箱别名时,系统能提示高风险

13.3 安全验收

  • 系统不提供明文密码字段
  • 系统不保存短信验证码
  • 系统不保存完整银行卡号和 CVV
  • 导出数据不包含敏感凭据
  • 支持数据库备份

14. Codex 实现要求

请按以下优先级实现:

P0:数据库模型、CRUD、页面基础结构
P1:绑定关系、详情页、搜索筛选
P2:风险检测、Dashboard、导入导出
P3:标签、附件、关系图、备份提醒

代码要求:

  • 使用清晰的模块划分
  • 前后端类型尽量统一
  • 所有枚举集中定义
  • 表单字段需要基础校验
  • 列表页支持分页、搜索、筛选
  • 详情页展示关联数据
  • 删除操作需要二次确认
  • 所有时间字段使用 ISO 8601
  • 手机号建议使用 E.164 格式
  • 邮箱字段需要格式校验
  • 不要实现明文密码存储

15. 示例数据

手机号

{
  "phone_number": "+86131xxxx0000",
  "country_region": "CN",
  "carrier": "China Mobile",
  "owner": "self",
  "status": "available",
  "can_receive_sms": true,
  "is_primary": true,
  "notes": "主力手机号,不建议绑定过多外区账号"
}

邮箱

{
  "email": "[email protected]",
  "email_type": "cloudflare_routing",
  "provider": "Cloudflare",
  "domain": "yunzhihui.ltd",
  "forward_to": "[email protected]",
  "status": "available",
  "can_receive_email": true,
  "can_send_email": false,
  "notes": "用于 Apple ID 注册,只收信不发信"
}

账号

{
  "platform": "Apple",
  "account_identifier": "[email protected]",
  "region": "US",
  "status": "normal",
  "two_factor_type": "sms",
  "credential_ref": "Vaultwarden: Apple/apple01",
  "recovery_ref": "Vaultwarden: Apple/apple01-recovery"
}

绑定关系

{
  "asset_type": "email",
  "binding_role": "login",
  "platform": "Apple",
  "status": "active",
  "risk_level": "low",
  "notes": "Apple ID 登录邮箱"
}

16. README 一句话定位

BindVault 是一个个人数字身份与绑定关系管理系统,用于维护手机号、邮箱、域名、账号、支付方式、订阅和恢复信息之间的关系,帮助用户清晰掌握自己的数字资产、绑定链路和风险状态。