本文档说明 PromiseLink 项目的安全策略、漏洞报告流程以及已实施的安全措施。 如果你发现安全漏洞,请务必按照本文档的【漏洞报告流程】进行私有披露,不要通过公开 Issue 提交。
PromiseLink 是一款处理用户私人关系、承诺与待办事项的应用,数据敏感性较高。我们承诺:
- 以安全为第一优先级:在任何功能与进度冲突时,安全优先。
- 默认安全(Secure by Default):所有敏感数据在存储与传输过程中均经过加密。
- 最小权限原则:用户数据严格按
user_id隔离,禁止跨用户访问。 - 可审计:关键安全事件均有审计日志,可追溯。
- 负责任的披露:我们尊重并保护安全研究者的合法工作,不会对善意披露提起法律诉求。
PromiseLink 处于快速迭代阶段,安全补丁仅适用于以下版本:
| 版本分支 | 状态 | 安全补丁支持 | 说明 |
|---|---|---|---|
main (开发主干) |
持续更新 | ✅ 支持 | 最新功能与安全修复 |
| 最新 Release tag | 稳定 | ✅ 支持 | 推荐生产部署版本 |
| 历史 Release tag | 已停止维护 | ❌ 不支持 | 请升级至最新版本 |
- 高危漏洞(CVSS ≥ 7.0):发布修复版本后,建议所有部署在 24 小时内 升级。
- 中危漏洞(CVSS 4.0–6.9):建议在 7 天内 升级。
- 低危漏洞(CVSS < 4.0):随下一常规版本发布修复。
- 我们会在 CHANGELOG.md 中以
security:前缀标注安全相关修复,并在 Release Notes 中说明影响范围与升级步骤。
请勿通过 GitHub Issue、Pull Request、公开评论、博客或社交媒体公开报告或讨论未修复的安全漏洞。 公开披露会使用户暴露在攻击风险中。
请通过以下方式私有报告漏洞:
- 首选邮箱:security@promiselink.app
- 可选加密:如需 PGP 加密,请在邮件中先索取公钥。
为帮助我们快速定位与修复,请在报告中包含:
- 漏洞标题与简要描述
- 受影响的版本(commit hash 或 Release tag)
- 复现步骤(越详细越好,包含必要的请求/响应样例)
- 影响评估(受影响的数据范围、潜在攻击场景)
- 建议的修复方案(如有)
- 你的联系方式(用于后续沟通与致谢)
- 你提交报告后,我们会在 48 小时内 确认收到。
- 我们会评估漏洞等级并与你保持沟通,必要时请求补充信息。
- 修复完成后,我们会在 Release Notes 中致谢(除非你要求匿名),并说明漏洞影响与修复方案。
- 我们支持 90 天的协调披露窗口,超期后你可在我们发布修复后公开技术细节。
| 阶段 | 承诺时限 | 说明 |
|---|---|---|
| 确认收到报告 | 48 小时内 | 工作日计算,邮件自动回复不算正式确认 |
| 初步评估与等级判定 | 5 个工作日内 | 给出 CVSS 评估与影响范围 |
| 修复方案沟通 | 视漏洞复杂度 | 高危漏洞优先处理 |
| 高危漏洞修复发布 | 7 天内 | 自确认漏洞之日起计算 |
| 中低危漏洞修复发布 | 30 天内 | 随常规版本发布 |
| 公开致谢与披露 | 修复发布后 | 在 Release Notes 中说明 |
如遇特殊情况(如漏洞影响范围极广、需协调多方),我们会主动与你沟通延期原因与新时间表。
PromiseLink 已实施以下安全措施,覆盖数据保护、认证授权、注入防护与多租户隔离。
- 静态数据加密:敏感字段(如微信消息原文、联系人备注等)使用 AES-256-GCM 对称加密存储,密钥通过环境变量注入,不落盘明文。
- 传输加密:生产环境强制 HTTPS(TLS 1.2+),Nginx 配置 HSTS。
- 密钥派生:加密密钥不直接使用用户口令,避免离线爆破。
- JWT 认证:所有受保护接口要求携带有效 JWT,token 设置合理过期时间,支持刷新机制。
- 密码存储:使用 bcrypt(带盐)哈希存储,不存明文。
- 速率限制:登录、注册等敏感接口启用速率限制,防止暴力破解。
- ORM 防注入:所有数据库访问通过 SQLAlchemy ORM 与参数化查询,禁止拼接原生 SQL。
- 输入校验:API 入参使用 Pydantic Schema 校验,拒绝非法输入。
- LLM 输出校验:LLM 返回内容经过结构化解析与白名单校验,防止 Prompt 注入导致的越权操作。
- user_id 强制隔离:所有数据查询均带
user_id过滤条件,从数据模型层面杜绝跨用户访问。 - 依赖注入校验:FastAPI 依赖项统一注入当前用户身份,业务代码无法绕过。
- 导出隔离:数据导出接口仅返回当前用户的数据,禁止指定他人
user_id。
- 审计日志:关键操作(登录、数据导出、权限变更)记录审计日志。
- 异常监控:集成 Prometheus 指标采集,异常请求速率触发告警。
- 基础版部署位置:基础版必须在用户本地设备运行(localhost:8000),禁止云端部署(硬约束)。用户通过
docker run或源码安装在本地运行。 - 数据库:PostgreSQL 单独部署,不与应用容器同网络,启用连接 TLS。
- Redis:启用密码认证,绑定内网 IP,禁止公网访问。
- 反向代理:Nginx 前置,启用 HSTS、CSP、X-Frame-Options 等安全头。
- 最小化镜像:使用多阶段构建,生产镜像不含编译工具与调试符号。
- 禁止硬编码:所有密钥(
JWT_SECRET_KEY、ENCRYPT_KEY、LLM_API_KEY、数据库密码等)通过环境变量或密钥管理服务注入。 - 密钥轮换:建议每 90 天轮换一次
JWT_SECRET_KEY与ENCRYPT_KEY,轮换时需配合数据迁移。 - 密钥分离:不同环境(开发/预发/生产)使用不同密钥,禁止跨环境复用。
.env文件:.env文件必须加入.gitignore,禁止提交至版本库(仓库已配置)。
- 内网通信:应用与数据库、Redis 之间走内网,不暴露公网端口。
- API 网关:生产环境建议前置 API 网关,统一鉴权与限流。
- 出站限制:LLM API 调用等出站请求建议通过白名单代理,防止 SSRF。
- CORS:严格配置 CORS 白名单,禁止
Access-Control-Allow-Origin: *。
- 定期备份:数据库每日全量备份 + 增量备份,保留 30 天。
- 备份加密:备份文件加密存储,密钥与备份分离保管。
- 恢复演练:每季度进行一次恢复演练,验证备份可用性。
- 安全漏洞报告:security@promiselink.app
- 一般 Bug 报告:GitHub Issues
- 安全相关 PR:提交时请在 commit message 使用
security:前缀
我们感谢以下安全研究者对 PromiseLink 项目的贡献(按报告时间排序):
(暂无)
| 日期 | 版本 | 变更说明 |
|---|---|---|
| 2026-06-17 | 1.0 | 初始安全策略发布 |
注意:本安全策略可能随项目演进更新,请以仓库最新版本为准。如有疑问,请通过 security@promiselink.app 联系我们。