#安全说明
这一页讲你上传的插件包会被怎么对待、你的账号是怎么被保护的, 以及为什么有些包会被拒。目的是让你在动手前就知道规则,而不是靠试错。
#你的插件包会经历什么
包传上来之后,按这个顺序处理。任何一步不过,包都不会进入市场,也不会留在存储里。
上传 → 算哈希 → 结构校验 → 解析 manifest → 交叉核对 → 所有权/版本判定 → 人工审核 → 上架
#1. 哈希对账
上传必须带 x-content-sha256 头。服务端独立算一遍,两者不一致直接拒收。
这不是形式主义 —— 它把「文件在传输中被改了/截断了」和「服务端算错了」彻底分开。 出问题时你不用猜是哪一环。
这个哈希会一路跟着这个版本:市场页展示的、客户端下载时校验的、你上传时声明的,是同一个值。
#2. 结构校验(在解压任何字节之前)
ZIP 的中央目录会先被完整读一遍,下面任何一条命中就拒收:
| 会被拒的东西 | 为什么 |
|---|---|
条目名含 .. |
解压路径穿越 |
绝对路径 /etc/...、盘符 C:/... |
同上 |
| 路径用反斜杠 | ZIP 规范只允许正斜杠,出现即可疑 |
| Windows 保留设备名(NUL/CON/COM1…) | 解压到这些名字会出各种怪事 |
| 符号链接条目 | 解压出来能指向包外 |
| 同名条目出现两次 | 不同解压器行为不一致,是经典投毒手法 |
| 单个文件压缩比过高 | zip 炸弹 |
| 加密压缩包 | 内容无法校验 |
| store / deflate 以外的压缩方法 | 解压面太大 |
| 声明尺寸与实际不符 | 中央目录在撒谎 |
炸弹是在被解压之前就按「声明尺寸」拦下的,不是解压到一半才发现。
尺寸上限:单包 200 MB,解压后总量 400 MB,条目数 5000。
#3. manifest 校验
manifest.json 必须在压缩包根目录。字段规则见插件开发指南。
几条容易踩的:
eventKey必须以<source>.开头 —— 一个插件不能声明别家的事件键source不能用保留字(admin / api / gateway / system / v1 / www 等)yokonex.tutorial声明的文件必须真的在包里- URL 里的
source必须与包内声明一致
#4. 所有权
source 一旦被某个开发者占用,其他人永远无法向它发版。
source 同时是本机网关的路由段(/v1/game-integrations/<source>/adapter-config),
所以它的唯一性是安全属性,不只是命名习惯。
如果你需要转移某个 source 的所有权,只能走人工流程 —— 这是防止插件被冒名顶替的必要成本。
#5. 版本不可变
已发布的包永远不会被覆盖。 要改就发新版本号,且必须严格大于所有历史版本 (包括被拒审的版本)。同内容(同 SHA-256)也不能重复上传。
这是 SHA-256 校验和客户端缓存能成立的前提 —— 如果同一个版本号的内容可能变, 那校验哈希就没有意义了。
#6. 人工审核
上传成功后版本状态是 pending。只有审核通过的版本才会被指为插件的最新版本,
所以未审核的包不会出现在市场列表里,也不会被客户端下载到。
审核员会看三样:
adapter声明的采集方式是否属实、是否安全- 包里可执行文件(
.exe/.dll/.bat/.ps1/.jar)的来源和用途 USAGE.md是否说清了安装步骤和风险
带 DLL 不会被拒 —— 游戏 Mod 本来就要带。但审核员会看它是干什么的, 所以附上源码和构建脚本能显著加快审核。
会被拒的:对带内核反作弊的游戏(Vanguard / BattlEye / ACE 等)读内存或注入。 这类游戏只能走画面识别或音频检测,见插件开发指南。
#你的账号
密码是单向存储的。 用 PBKDF2-SHA256 加每人独立的随机盐,迭代次数很高。 数据库被拖走也还原不出你的密码。
顺带说清一个常见误解:AES 这类对称加密做不了「单向」,它有密钥就能还原明文。 用 AES 存密码是安全事故的经典成因 —— 密钥一泄露,全站密码同时明文化。 单向只能靠哈希/KDF。
会话令牌明文只存在于你浏览器的 Cookie 里,服务端库里存的是它的哈希。
Cookie 是 HttpOnly + Secure + SameSite=Lax:脚本读不到,跨站请求带不上。
登录失败会限流,按来源和按账号两个维度都有。连续失败会临时锁定 —— 如果你是自己输错了,等一会儿再试即可。
密码只卡长度(至少 10 位),不要求大写+数字+符号。
那类规则的实际效果是逼出 Passw0rd! 这种密码,反而更好猜。用长的、你记得住的。
#开发者中心是独立的一个源
developer.ycygame.org 与主站、客户端 API 不在同一个源上,登录 Cookie 只作用于它自己,
不下发到 .ycygame.org 的其它子域。
这意味着:主站或任何其它子域出前端问题,都碰不到你的开发者会话。
对你的影响:从别的站点跳过来时需要重新登录一次,这是有意的。
#客户端与设备
游戏事件不出本机。 插件把事件发到 127.0.0.1:43002,客户端在本地决定该做什么。
云端只负责插件目录、下载和版本更新,从不接收也不转发你的游戏事件。
本机网关只绑 127.0.0.1,不监听外部网卡。
客户端下载插件后会按服务端下发的 SHA-256 校验,不符拒绝安装。
客户端调用的接口全部只读 —— 发布、审核、下架都在开发者中心,需要登录态。 所以即使客户端被完全逆向,也做不了写入操作。
#报告安全问题
发现漏洞请发邮件到 info@by-wave.com,请附上复现步骤。
(平台发出的验证/重置邮件来自 security.ycygame.org 域;报告问题请用上面这个地址。)
请不要先公开披露、不要在插件市场里放 PoC 包、不要对线上做破坏性测试 (压测、批量注册、数据删除)。
只要是善意报告,我们不会追究。