SuperAPI AI 工具集

roblox-networking

安全与审计

查看项目

更新于 10-16 08:14

技能介绍

用途

本参考文档用于在 Roblox 开发中处理网络与安全相关任务,包括:在服务端校验 RemoteEvent/RemoteFunction 的输入;实现速率限制与反作弊措施;设计服务器权威系统(伤害、货币、背包);加固现有网络代码以抵御作弊者。文档聚焦服务端校验、速率限制、可疑度评分与服务器权威设计模式。玩家生命周期(PlayerAdded/Removing)相关内容另见 roblox-architecture。

核心原则

  • 永不信任客户端。每个 RemoteEvent 参数都由攻击者控制。
  • 对每个服务端处理函数校验:类型、范围、归属、冷却。
  • 服务器权威:由服务器决定结果,客户端仅负责显示。
  • 对所有远程调用做速率限制,至少使用按玩家冷却表。
  • 伤害:由服务器根据武器属性、距离与冷却计算,绝不接受客户端传来的伤害值。
  • 货币:所有计算在服务端完成,客户端仅显示。
  • 移动:根据物理规则校验距离与速度,标记瞬移行为。
  • 使用 t 库对远程参数做可组合的类型检查。
  • 可疑度评分:累积违规,达到阈值再踢出或封禁,不要首次违规就立即踢出。

作弊者能力

作弊者可以:触发任意远程调用;读取所有客户端代码;修改任意客户端状态;加速、飞行、瞬移。具体而言:修改任意 LocalScript(注入代码、改变量、挂钩函数);以任意参数触发任意 RemoteEvent(类型、数值、数量均可控);速度作弊、飞行与瞬移(角色物理可在客户端被完全覆盖);查看所有客户端可访问代码(StarterPlayerScripts、StarterGui、ReplicatedStorage、ReplicatedFirst 中的内容完全可读);读取并修改任意客户端状态(血量显示、冷却计时、UI 标志);拦截并重放网络流量(RemoteSpy 类工具可让作弊者看到每次远程调用并重放或修改)。

客户端是显示层,不是可信权威。它渲染世界并收集输入,服务器决定实际发生什么。一个有用的心智模型:把每次 RemoteEvent:FireServer() 调用都当作来自互联网匿名陌生人的 HTTP 请求。校验一切,不做任何假设。

主要能力

文档提供生产可用的校验模块 RemoteValidator(放置于 ServerScriptService),包含:类型检查(checkType、validateArgs,支持 schema 声明并拒绝多余参数);范围检查(checkRange、checkIntegerRange,含 NaN 检查);冷却跟踪(按玩家、按动作的 checkCooldown、clearPlayerCooldowns);存在性检查(playerExists、characterAlive、instanceExists);授权检查(playerOwnsItem、playerHasAttribute);距离检查(withinRange、playerWithinRange);以及玩家离开时的清理逻辑。

运行时类型检查可使用 t 库,位于 vendor/t/t.lua(osyrisrblx/t v3.1.1,MIT),提供 t.string、t.number、t.interface({...}) 等可组合类型检查,比手写 typeof() 链更清晰。

使用方式

文档给出完整示例:在 ServerScriptService/RemoteHandlers/DamageHandler.server.luau 中,对伤害远程调用依次执行参数类型校验、目标是否为 Player、伤害范围校验、冷却检查、攻击者存活校验、目标存活校验、距离校验、授权校验(是否装备有效武器)、由服务器计算实际伤害、最后施加伤害。

服务器权威设计部分给出移动校验示例(ServerScriptService/Security/MovementValidator.server.luau),通过 Heartbeat 按间隔检查水平与垂直速度,超过阈值累积违规,达到阈值后传送回上一有效位置或踢出,并对合法边缘情况随时间衰减违规计数。伤害校验示例展示由服务器检查武器冷却、距离并计算伤害。货币交易示例对比错误做法(客户端告知服务器加多少)与正确做法(服务器计算奖励)。

适用场景

适用于需要防御作弊的 Roblox 多人游戏网络层开发与加固,尤其是涉及战斗伤害、货币交易、背包归属、移动同步等对服务器权威要求较高的系统。

限制

文档内容在提供的资料中于货币交易示例处截断,后续内容暂未提供。文档未提供收费、价格、平台支持范围等信息。