首页 / 资讯中心 / 文章详情

Lunar Tear 安全设计清单:Admin Webhook、Bearer Token 与 fail-closed 机制详解

Lunar Tear 安全设计清单:Admin Webhook、Bearer Token 与 fail-closed 机制详解 ★ FEATURED ARTICLE
【免费下载链接】lunar-tearPrivate server research project for a certain discontinued mobile game项目地址https://gitcode.com/gh_mirrors/lu/lunar-tear点击查看免费下载Lunar Tear 是一个针对已停服手游的私服研究项目由 gRPC 游戏服、HTTP 资源 CDN、auth-server 登录服务和 Admin Webhook 四部分组成。本文带你快速看懂它的完整安全设计Admin Webhook 如何受 Bearer Token 保护、客户端登录 Token 采用什么签名方案以及 fail-closed默认关闭机制如何保证未配置就绝不暴露。项目架构速览四服务各司其职Lunar Tear 的每个服务都只开放必要的端口管理端点更是被单独隔离服务二进制端口职责游戏服lunar-tear8003gRPC 主服务客户端登录、抽卡、任务等资源 CDNocto-cdn8080资产包、master data、list.bin 下发登录服务auth-server3000账号注册与登录签发 TokenAdmin Webhooklunar-tear8082热重载 master data默认仅回环服务入口见 server/cmd/lunar-tear/main.goAdmin Webhook 监听地址的默认值就写在命令行参数里——127.0.0.1:8082只允许本机访问main.go。Admin Webhook如何安全地不重启热更新私服运营者常需要修改游戏内数据即 master data 文件assets/release/20240404193219.bin.e。Lunar Tear 提供一个管理端点POST /api/admin/master-data/reload让服务器在不重启的情况下重新读取该文件原子替换全部内存目录并让在线客户端自动拉取新版数据。它的实现非常克制整个逻辑只有几十行位于 server/cmd/lunar-tear/admin.go。触发方式一条带 Bearer Token 的请求在环境变量中设置LUNAR_ADMIN_TOKEN后用如下命令即可触发热重载curl -X POST -H Authorization: Bearer ${LUNAR_ADMIN_TOKEN} \ http://127.0.0.1:8082/api/admin/master-data/reload热重载由 server/internal/runtime/holder.go 中的Holder完成每次重新加载都会从头构建一份全新的Catalogs快照再通过原子指针一次性发布所有 gRPC 请求在开始时调用Get()因此永远看到一致的数据。Bearer Token 认证的两层设计Lunar Tear 中有两类 Bearer Token分别保护管理面和客户端面。管理端LUNAR_ADMIN_TOKEN 与恒定时间比较Admin Webhook 的鉴权逻辑在 admin.go只接受POST其他方法直接返回405请求头必须是Authorization: Bearer token比较使用subtle.ConstantTimeCompare第 36 行这是防计时侧信道攻击的标准做法——普通字符串比较会在第一个不匹配字节处提前返回攻击者可据此逐字节猜测 Token而恒定时间比较消除了这种信息泄露校验失败统一返回401 unauthorized不泄露Token 是空、是格式错还是不匹配等细节。客户端auth-server 签发的 HMAC-SHA256 Token客户端的Facebook 登录按钮实际被重定向到 auth-server输入用户名/密码后签发一个自定义格式 TokenBase64URL(payload).Base64URL(HMAC-SHA256签名)其中 payload 包含sub用户 ID、name、iat签发时间、exp过期时间有效期固定 24 小时见 server/internal/auth/token.go。验证流程在 Validate 函数 中按顺序执行格式拆分 → Base64 解码 →hmac.Equal恒定时间校验签名 → 解析声明 → 检查过期任何一步失败都拒绝ErrTokenInvalid/ErrTokenExpired。游戏服通过 auth-server 的/me端点换取用户身份该端点同时兼容access_token查询参数与Authorization: Bearer头两种传法handlers.go。密钥管理也很讲究--secret省略时auth-server 启动时用密码学安全随机数生成 32 字节密钥并打印到控制台提示你在下次重启时通过--secret复用保证已有 Token 不过期失效server/cmd/auth-server/main.go。fail-closed未配置就绝不监听fail-closed 的核心思想是出问题时宁可不可用也绝不暴露。Lunar Tear 在 Admin Webhook 上贯彻了这一点admin.go 的注释与代码明确写道如果LUNAR_ADMIN_TOKEN未设置或为空监听器根本不会绑定——新部署永远不会暴露一个未认证的端点。三层防线叠加无 Token 无端口环境变量未设置时8082 端口上什么都没有连扫描器都找不到端点️默认回环--admin-listen默认127.0.0.1:8082只有运维者显式改成0.0.0.0才会对外暴露⏱️恒定时间比较即使端口暴露Token 猜测也无法利用响应时间差异。Docker 部署同样延续此默认compose 文件将容器内0.0.0.0:8082仅映射到宿主机的127.0.0.1:8082且LUNAR_ADMIN_TOKEN从.env注入server/docker-compose.yaml。其他值得学习的安全细节 bcrypt 存储密码注册时密码经bcrypt.GenerateFromPassword加盐哈希后入库绝不存明文server/internal/auth/store.go统一错误文案登录失败一律返回 Invalid username or password.避免暴露该用户不存在防止账号枚举handlers.go注册开关--no-register开放运营前可关闭自助注册改用 server/cmd/register-account/ 工具受控建号实现白名单式开服模板自动转义登录页与 OAuth 重定向页均使用 Gohtml/template自动防止 XSShandlers.go。部署检查清单 ✅#检查项预期状态1LUNAR_ADMIN_TOKEN是否已设置未设置时 8082 端口不监听fail-closed2--admin-listen绑定地址默认127.0.0.1:8082公网部署勿改0.0.0.03auth-server 的--secret重启时复用同一密钥否则存量 Token 全部失效4注册策略稳定运营期建议开启--no-register5Token 有效期客户端 Token 24 小时到期需重新登录更多端口、环境变量与命令行参数的完整对照可查阅 README.md 的 Live Master Data Reload 一节。小结Lunar Tear 的安全设计体现了一套清晰的原则——最小暴露无 Token 不监听、默认回环、强认证HMAC 签名 恒定时间比较、弱默认注册可一键关闭。这些模式对任何需要暴露管理端点的自建服务项目都值得借鉴。赞分享【免费下载链接】lunar-tearPrivate server research project for a certain discontinued mobile game项目地址https://gitcode.com/gh_mirrors/lu/lunar-tear点击查看免费下载相关推荐如何免费解锁 WeMod 专业版Wand-Enhancer 本地补丁与手机远程面板实操如何免费解锁 WeMod 专业版Wand Enhancer 本地补丁与手机远程面板实操 Wand Enhancer 是完全开源的本地补丁工具扫描本机 WeM桌面应用前端gsd-core Worktree 清理安全加固基于 per-wave Manifest 的失败关闭fail-closed机制解析gsd core Worktree 清理安全加固基于 per wave Manifest 的失败关闭fail closed机制解析 导读 本文聚焦 GSDAOS Capsule 安全设计详解信任边界、边缘校验、Fail-Closed 语义、资源限制与对抗式评审AOS Capsule 安全设计详解信任边界、边缘校验、Fail Closed 语义、资源限制与对抗式评审 本文以 AOS Community Edition创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
阅读完成 · 觉得有帮助?
咨询建站