本地单机运行 · 不面向外网 · 单人自用

把散落的 AI 额度、账号密码、
服务器与凭证收进一个加密台账

Node.js + Express + SQLite,单个 db 文件即可迁移备份。API Key、密码、SSH 私钥全部用 AES-256-GCM 加密入库,页面只显示掩码,需要时逐字段解密。

「打开本地应用」需要先在本机执行 npm run init -- 密码 与 npm start,默认地址 http://127.0.0.1:3000。

Scope

四类资产,一套台账

AI RESOURCES

AI 资源

平台、接口地址、API Key、模型、总额度 / 已用 / 剩余、额度到期时间。剩余额度 ≤10% 自动标红。

ACCOUNTS

账号资产

平台、登录地址、账号、邮箱、密码、绑定手机、注册时间。密码加密存储,仅在需要时解密。

CLOUD & SERVERS

云 & 服务器

IDC / VPS / Cloudflare Pages / 域名 / DNS / 证书,含 IP、SSH 端口、登录账号、续费时间。

CREDENTIALS

其他凭证

订阅服务、会员、接口密钥。名称、关联账号、密钥、到期时间一屏可见。

分类筛选 & 模糊搜索

顶栏标签切换分类,搜索框同时匹配平台名称与备注,输入即筛。

到期提醒

已过期标红「已过期 N 天」,≤30 天(可配)标橙「剩余 N 天」,续费不再漏。

CSV 导出备份

支持脱敏导出与含明文密钥导出,带 UTF-8 BOM,Excel 打开中文不乱码。

Security

安全是这套系统的重点,不是附赠

  • AES-256-GCM 加密:密码 / API Key / SSH 私钥 / 凭证密钥随机 IV + 认证标签,改密文必然解密失败。
  • 管理员密码加盐哈希:scrypt(N=16384, r=8, p=1) + 16 字节随机盐,只存哈希,恒定时间比对。
  • 全接口登录鉴权:未登录访问任何 /api/* 返回 401,不泄露一条资产。
  • XSS 防护:前端只用 textContent 渲染,后端清洗控制字符,CSP 禁内联脚本。
  • 会话安全:HMAC 签名 HttpOnly + SameSite=Strict Cookie,空闲 120 分钟过期,重启即失效。
  • 日志脱敏:只记录方法、路径、状态码与耗时,绝不打印密钥与密码。
风险点处理方式
明文存储敏感字段入库前 AES-256-GCM 加密,库内形如 enc:v1:<base64>,列表接口只返回掩码
传输过程暴露仅监听 127.0.0.1;明文走独立接口且响应 no-store;可反代 HTTPS 并开 COOKIE_SECURE=1
暴力破解登录同 IP 10 分钟内 5 次失败锁定 10 分钟
CSRFSameSite=Strict + 写操作 Origin/Referer 同源校验
参数注入 / 超长字段白名单 + 类型、长度、日期格式、枚举校验,未声明字段直接丢弃
配置文件外泄.env、data/、*.db、*.csv 全部在 .gitignore 中

Quick start

三步跑起来

terminal
# 1. 安装依赖(仅 express)
npm install

# 2. 生成 AES_KEY / SESSION_SECRET 并设管理员密码
npm run init -- 你的管理员密码

# 3. 启动
npm start
# → http://127.0.0.1:3000

环境要求

Node.js ≥ 22.5(使用内置 node:sqlite,无需编译原生模块;低版本会自动回退 better-sqlite3)。

备份

停服后复制 data/assets.db 即完成备份;换机时连同 .env 一起拷贝,npm install && npm start 即可恢复。

注意

AES_KEY 丢失 = 已加密数据永久无法解密,请与数据库分开另存。

Structure

项目结构

server.js              入口:安全响应头、请求日志、路由挂载、启动自检
src/
  env.js                 极简 .env 加载器(不依赖 dotenv)
  crypto.js              AES-256-GCM 加解密
  auth.js                scrypt 密码哈希 + 签名 Cookie 会话
  db.js                  SQLite 初始化与建表
  schema.js              四类资产字段定义(前后端唯一来源)
  validate.js            输入校验、清洗、字段白名单
  routes/auth.js         登录 / 登出 / 会话状态(含失败限流)
  routes/assets.js       CRUD + 搜索 + 单字段解密 + CSV 导出
public/                  index.html · login.html · app.js · login.js · style.css
scripts/set-password.js 生成密钥与密码哈希写入 .env
docs/index.html         本介绍页(GitHub Pages)
data/assets.db         单文件数据库(首次启动自动创建,不入库)