生产环境安全清单
OneBot
- 生产环境设置非空且不可猜测的 Access Token;
- 限制
allowed-group-ids,避免使用allow-all-groups: true; - 同机使用
ws://127.0.0.1; - 跨主机使用
wss://; - 只有在可信加密隧道中才考虑
allow-insecure-remote-websocket; - 通过防火墙限制 OneBot 端口来源;
- 不要在日志、截图或 Issue 中公开 Token。
数据库
- 为 ShitBot 创建独立数据库账号;
- 只授予目标数据库所需权限;
- 远程 MySQL 使用
sslMode=VERIFY_IDENTITY; - 保持
allowPublicKeyRetrieval=false; - 不要在多个进程间共享 SQLite 文件;
- 升级、迁移和更换平台前备份;
- 不要公开数据库 URL、账号或密码。
代理—后端通道
- 每个后端使用不同的至少 16 位随机 Token;
- 同机 listener 绑定
127.0.0.1; - 跨机器启用 TLS;
- 后端
allowed-proxy-addresses只填写代理实际 IP; - 防火墙只允许代理访问监听端口;
- 不要把 listener 直接暴露到公网;
- TLS 环境仍保留 HMAC Token;
- 需要更强身份校验时启用双向 TLS。
HMAC 提供请求认证和完整性,不提供内容加密。跨机器通信必须由 TLS 或可信加密隧道保护。
QQ 快捷命令
- 只配置确实需要的控制台命令;
- 为敏感快捷命令填写
permission; - 保持
allow-unbound: false; - 限制允许群和命令别名;
- 不要把任意群输入直接拼接进开放式控制台命令;
- 定期检查 LuckPerms、Vault 和 OP 权限;
- 观察命令冷却、超时和队列是否符合实际负载。
permission 为空只表示不检查游戏权限。将 allow-unbound 设为 true 才会允许未绑定群成员调用,因此修改此项前必须重新评估命令风险。
高级图片模板
- 不需要高级模板时保持
custom-image-templates.enabled: false,此时不会下载或加载渲染组件; - 只使用官方 Release 中同版本的
ShitBotRenderer、.sha256和.sig,不要绕过组件签名; - 编辑器保持回环监听,通过 HTTPS 反向代理远程使用时不要直接公开内部端口,并保留原始
Host; /shitbot editor登录地址是短时一次性凭据,不要发送到群聊、日志或 Issue;- 远程图片默认开启以支持玩家头像,仍受 HTTPS、地址和资源上限限制;不需要网络头像或素材时,可关闭
custom-image-templates.remote-images.enabled; - 不要手工修改
versions/与published.yml,生产渲染只应使用发布快照; - 不要无上限提高画布、像素、图层、循环、资源、超时、线程和队列限制;
- 自定义数据提供器必须在访问平台 API 时自行切换到正确线程,并只返回渲染所需数据。
当前模板引擎不执行上传的 HTML、JavaScript 或任意服务器命令,也不包含浏览器内核。commands.yml 的图片模板入口与控制台快捷命令是两套独立机制。
账号绑定
- 保持验证码有效期和尝试次数限制;
- 不要把
code-alphabet改成过小字符集; - 按服务器业务设置
maximum-ids-per-qq; - 开启
group-leave-unbind前确认退群即解绑符合业务规则; - 数据库异常时不要绕过绑定检查;
- 处理迁移文件后及时移走 EasyBot 数据库副本。
更新
- 只从官方 GitHub Release 获取 JAR;
- 保留
.sha256与.sig校验链; - 更新失败时检查原因,不绕过签名;
- 群组服同时更新代理和后端;
- 替换 JAR 后正常重启,不使用插件管理器热加载;
- 发布私钥只保存在仓库 Secret。
日志与备份
- 对外发送日志前删除 Token、密码、数据库地址和玩家隐私;
- QQ 快捷命令的日志脱敏只是额外保护,不应替代最小权限;
- 数据库备份应加密并限制访问;
- 配置备份中同样包含敏感信息;
- 不要把生产配置、数据库或签名私钥提交到 Git;
- 定期确认备份可以恢复。
网络与资源
- 限制数据库、OneBot、后端 listener 和管理面板端口的来源;
- 为远程服务配置连接与读取超时;
- 不要无上限提高数据库、图片渲染、数据提供器或命令队列;
- 背包资源包和客户端 JAR 只使用可信来源;
- 头像与外部图片服务应使用 HTTPS。