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 的私密渠道:
- 仓库页 → Security → Report a vulnerability (若该入口不可用,则开一个 issue 只写「需要私下沟通安全问题」,不要贴细节)
请附上:影响版本、复现步骤、影响范围。
因为这是个人维护的项目,我尽量在 7 天内回应,但无法承诺 SLA。
只对 main 分支的最新版本提供安全修复。旧版本请先升级。