请不要在公开的 Issue 里报告安全漏洞。
请使用 GitHub 仓库页面「Security」标签下的 Report a vulnerability(私密安全通告)提交, 描述中请包含:
- 影响的版本(见根目录
VERSION) - 复现步骤或概念验证
- 你评估的影响范围(例如:越权访问、绕过计费、信息泄露)
请勿在报告里附带真实用户数据、API Key、数据库连接串等敏感信息。 我们会尽快确认并处理;修复发布之前,请不要公开漏洞细节。
只维护最新发布的版本。安全修复会合入主分支,并在更新日志中注明。
本项目会保存用户账号、上游模型的 API Key 与生成的媒体文件。部署到公网之前,请逐项确认:
| 项 | 要求 | 说明 |
|---|---|---|
| 管理员口令 | ADMIN_PASSWORD 使用强口令 |
只在库里还没有管理员时用于创建账号;建号之后再改配置文件不会改口令,请登录后台修改 |
| 登录密钥 | JWT_SECRET 固定为随机长串 |
deploy.sh init 会自动生成;留空会在每次重启时随机生成,导致所有人掉线 |
| 端口暴露 | 前端端口只绑本机回环(默认 127.0.0.1:3000),前面挂 Nginx + HTTPS |
绑到 0.0.0.0 会绕过 HTTPS 和反向代理直接暴露在公网 |
| 可信代理 | 正确配置 TRUSTED_PROXIES(默认已包含私有网段) |
配错时后端拿不到用户真实 IP,按 IP 计的登录失败锁定会变成全站共用,任何人都能锁住别人的账号 |
| 数据库 | 使用独立账号、只允许应用服务器访问、开启定期备份 | 用户、点数与流水、渠道配置都在库里 |
| 对象存储 | 桶按「公共读、私有写」配置,访问密钥只授予该桶的权限 | 上游模型需要通过公网地址读取参考素材,因此素材地址是可公开访问的 |
| 渠道密钥 | 为本系统单独申请上游 API Key,并设置用量上限 | 后台管理员可以看到渠道密钥,请控制管理员账号的数量 |
| 定价 | 新增模型后先在「分级定价」里配置单价再开放给用户 | 没配价的模型按 0 点计费,等于对所有人免费,而上游照常计费 |
下列问题在本版本已知存在、尚未修复,对应接口的源码是公开的。修复会在后续版本合入主分支并在更新日志中注明;技术细节与修复方向见开发者指南 10.6。这些接口都要求先登录——把 allowRegister 关闭、且不开放短信 / 第三方登录时,只有管理员建过账号的人可触达;即便如此,也请在决定是否面向不完全可信的用户开放前先了解。
| 问题 | 说明 | 部署方可采取的缓解 |
|---|---|---|
| 视频提交计费可被构造的请求绕过 | 提交视频生成的接口,计费按后端从请求体解析出的时长 / 分辨率计算。精心构造的请求可能让计费值低于上游实际执行值,导致少计费——差价由运营方在上游账户承担。正常网页操作不会触发。 | 监控上游用量与本地扣点流水的差额;给上游 API Key 设用量上限;控制能登录的账号数量 |
| 服务端按用户地址拉取素材,内网过滤不完整(SSRF) | 「视频编辑按源视频时长计费」与「媒体转存」两条路径,都会由服务端去访问用户提供的地址,而对内网 / 云元数据地址的过滤不完整。已登录用户可能借此让服务端访问内部地址,个别路径还可能读回所拉取的内容。 | 限制后端容器出网,只放行必要的上游 / 存储域名;屏蔽后端对云厂商实例元数据服务的访问;实例改用 IMDSv2,或不给实例绑定高权限 IAM 角色 |
更多运维细节见 部署指南。