役次元 Yokonex Hub 开发文档

#安全说明

这一页讲你上传的插件包会被怎么对待你的账号是怎么被保护的, 以及为什么有些包会被拒。目的是让你在动手前就知道规则,而不是靠试错。


#你的插件包会经历什么

包传上来之后,按这个顺序处理。任何一步不过,包都不会进入市场,也不会留在存储里。

上传 → 算哈希 → 结构校验 → 解析 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 必须在压缩包根目录。字段规则见插件开发指南

几条容易踩的:

#4. 所有权

source 一旦被某个开发者占用,其他人永远无法向它发版。

source 同时是本机网关的路由段(/v1/game-integrations/<source>/adapter-config), 所以它的唯一性是安全属性,不只是命名习惯。

如果你需要转移某个 source 的所有权,只能走人工流程 —— 这是防止插件被冒名顶替的必要成本。

#5. 版本不可变

已发布的包永远不会被覆盖。 要改就发新版本号,且必须严格大于所有历史版本 (包括被拒审的版本)。同内容(同 SHA-256)也不能重复上传。

这是 SHA-256 校验和客户端缓存能成立的前提 —— 如果同一个版本号的内容可能变, 那校验哈希就没有意义了。

#6. 人工审核

上传成功后版本状态是 pending只有审核通过的版本才会被指为插件的最新版本, 所以未审核的包不会出现在市场列表里,也不会被客户端下载到。

审核员会看三样:

  1. adapter 声明的采集方式是否属实、是否安全
  2. 包里可执行文件(.exe/.dll/.bat/.ps1/.jar)的来源和用途
  3. 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 包、不要对线上做破坏性测试 (压测、批量注册、数据删除)。

只要是善意报告,我们不会追究。