Repository navigation
ShitBot v1.0.9
What's Changed
本次更新主要完善 QQ 快捷命令的控制台日志捕获与隐私过滤,同时强化插件更新、代理—后端通信、OneBot 和数据库连接的安全性。
Warning
记得新加载config
控制台命令日志捕获
- 快捷命令现在直接以只读方式监听服务器的
logs/latest.log:- 执行命令前记录日志位置;
- 等待
capture-seconds指定的时间; - 回传这段时间内所有插件追加的新日志;
- 支持捕获 LuckPerms 等插件异步线程产生的输出;
- 不再依赖插件名称或命令注册来源判断是否抓取日志。
- 日志读取不会修改、清空或重写服务器原有的
latest.log。 - 自动移除 ANSI 颜色与格式控制符,修复 LuckPerms 编辑器链接等日志中可能出现的乱码。
- 如果命令成功但没有产生新日志,会返回明确提示,而不是发送空消息。
- 单次回传最多保留 100 行、4000 个字符,避免大量日志刷屏。
日志隐私保护
回传给 QQ 的日志副本现在会自动进行隐私过滤:
- 丢弃玩家聊天消息;
- 丢弃玩家加入、退出、连接和断开日志;
- 丢弃玩家执行命令的日志;
- 丢弃类似
[玩家: Set own game mode to Creative Mode]的命令反馈日志; - 将请求绑定玩家及当前在线玩家的名称替换为
<player>; - 将玩家 UUID 替换为
<uuid>; - 将 IPv4 和 IPv6 地址替换为
<ip>; - 脱敏 Bearer Token、Authorization、password、secret、token 和数据库连接地址等敏感内容。
这些过滤只作用于回传内容,不会修改服务器中的原始日志文件。
插件更新安全
/shitbot update现在除了 SHA-256 和 JAR 内容检查,还必须验证独立 RSA 签名。- 更新验证公钥已经内置到 ShitBotCore,并会被打包进 Spigot、BungeeCord 和 Velocity 插件。
- 服主不需要下载或配置公钥。
- Release 缺少
.sig文件、签名不匹配、JAR 平台不匹配或版本信息异常时,更新器会拒绝替换现有插件。 - GitHub Release 构建流程会为三个平台的 JAR 自动生成:
.sha256校验文件;.sig独立签名文件。
- BungeeCord 向后端分发更新时,会同时传递 JAR、SHA-256 和签名元数据,由各子服独立验证后再执行替换。
代理与后端通信安全
- Console Socket 协议升级到版本 2。
- 每个连接都会使用服务端随机 challenge 参与 HMAC 签名,阻止旧请求在服务器重启后被重放。
- 新增 TLS 和可选双向 TLS 支持:
- 支持 PKCS12 key store;
- 支持自定义 trust store;
- 支持要求客户端证书。
- 非回环地址的明文代理—后端连接现在默认拒绝。
- 只有在 WireGuard、Tailscale 等外部加密隧道中并明确接受风险时,才应开启
allow-insecure-remote-plaintext。 - 新增固定大小的连接池、等待队列、请求截止时间和连接失败熔断,避免大量请求拖垮代理或后端。
- 加强请求 ID、nonce、消息长度和重复请求检查。
OneBot 连接安全与稳定性
- 远程
ws://OneBot 连接现在默认拒绝,跨主机部署应使用wss://。 - 如已通过可信加密隧道传输,可显式开启
onebot.allow-insecure-remote-websocket。 - 优化插件关闭时的 WebSocket 处理,不再无限等待 OneBot 关闭连接。
- OneBot 关闭流程增加超时与强制终止兜底,降低服务器关闭卡住的概率。
- 隔离控制台任务和 OneBot 任务,避免日志抓取或网络任务相互阻塞。
数据库与绑定安全
-
远程 MySQL 连接现在默认要求 TLS,推荐使用:
sslMode=VERIFY_IDENTITY -
如确实需要远程明文 MySQL,必须显式开启 allow-insecure-remote-mysql。
-
默认关闭 allowPublicKeyRetrieval,降低认证信息暴露风险。
-
MySQL 数据库迁移新增 GET_LOCK 数据库级锁,避免代理和多个后端同时启动时并发执行 DDL。
-
数据库迁移锁等待时间受 JDBC 超时限制,不会无限阻塞启动。
-
只有数据库列定义确实不符合目标结构时才执行修复性 ALTER TABLE。
-
加强数据库初始化、事务处理和异常恢复。
-
调整绑定验证码防爆破机制:
- 总尝试次数默认提高到 30;
- 达到总上限后进入短暂冷却,不再立即销毁验证码;
- 新增 binding.total-attempt-cooldown-seconds;
- 实际总尝试上限至少为单 QQ 尝试上限的 4 倍,减少恶意用户提前耗尽他人验证码的可能。
PictureBridge
- ShitBot 仓库中的 PictureBridge 子模块已更新到最新版本。
- 子模块明确跟踪 PictureBridge 的 main 分支。
- 新增自动同步 workflow:PictureBridge 出现新提交后,ShitBot 会定期更新子模块引用。
- PictureBridge 仍然是独立的纯客户端模组,不会被合并进服务端插件 JAR。
升级注意事项
- Console Socket 协议已经升级,使用代理—后端模式时,请同时升级代理端和所有 Spigot 后端。
- 跨机器使用明文 Console Socket、远程 ws:// OneBot 或未启用 TLS 的远程 MySQL,在本版本中会默认拒绝连接。
- 同机 127.0.0.1 / ::1 通信不受远程明文限制影响。
- 新版本更新器要求 Release 同时包含对应 JAR 的 .sha256 和 .sig 文件。
- 更新完成后仍需手动重启服务器或代理,不建议使用插件热重载。
完整变更记录: 1.0.8...1.0.9