Skip to content

Security: ADA-quart/ITDC

Security

SECURITY.md

安全说明

威胁模型(请先读这段)

ITDC 是一套单用户自部署应用,默认没有账号体系。 这意味着:谁能访问到你的服务地址,谁就能读写你的全部数据。

  • 本地使用(http://localhost:3000):风险可忽略
  • 局域网使用(http://192.168.x.x:3000):同一网络下的人可访问
  • 公网部署(https://你的域名):必须先加一层访问控制

公网部署的推荐做法(任选其一):

方式 说明
Cloudflare Access 免费额度足够个人使用,按邮箱/域名放行
反向代理 Basic Auth Nginx / Caddy 一层密码,配置最简单
仅内网 + 内网穿透 用 Cloudflare Tunnel 但不公开域名
WireGuard / Tailscale 组私有网络,服务不暴露公网

不要在没有访问控制的情况下把 3000 端口直接映射到公网。

密钥

CRYPTO_SECRET 用于 AES-256-GCM 加密存储在数据库里的 LLM API Key。

  • 生产环境(NODE_ENV=production)下,未设置或仍为默认值时拒绝加密/解密并抛出错误
    • 注意这是惰性检查:错误发生在第一次保存或读取 LLM API Key 时,而不是进程启动时
    • 用 docker compose 部署时例外:docker-compose.yml 要求显式传入该变量,缺失会直接启动失败
  • 开发环境允许使用默认弱密钥,但会在首次使用时打印警告
  • 生成方式:openssl rand -hex 32

注意:换掉 CRYPTO_SECRET 会导致已存的 LLM API Key 无法解密,需要重新填写。

数据存放位置

数据 位置 说明
日历 / 待办 / 事件 data/calendar.db(SQLite) 服务端模式下的权威数据
同一份数据的本地副本 浏览器 / App 的 IndexedDB 仅本机模式下这是唯一数据源
LLM API Key data/calendar.db,字段加密 取回时永不明文返回
服务器地址 localStorage / 原生 SharedPreferences 不含凭据

备份 = 定期保存 calendar.db。这个文件里包含全部业务数据。

已知限制

  • 无账号、无鉴权、无速率限制(见上文威胁模型)
  • 无端到端加密:服务端模式下数据以明文存于服务器数据库
  • 同步采用「最后写入者胜」,不做字段级合并

报告漏洞

请不要通过公开 issue 提交安全问题。走 GitHub 的私密渠道:

  1. 仓库页 → Security → Report a vulnerability (若该入口不可用,则开一个 issue 只写「需要私下沟通安全问题」,不要贴细节)

请附上:影响版本、复现步骤、影响范围。

因为这是个人维护的项目,我尽量在 7 天内回应,但无法承诺 SLA。

支持范围

只对 main 分支的最新版本提供安全修复。旧版本请先升级。

There aren't any published security advisories