游戏安全

Time:客户端与服务器

Roblox 开发者在进行游戏开发时,可能需要注意游戏安全方面的问题。虽然绝大部分 Roblox 玩家在游玩时会遵守使用条款,但仍然有部分玩家会试图通过破坏数据存储、添加模型等方式来破坏游戏规则。

我们将在本文中介绍几个保障游戏安全性的方法。

检查免费模型与插件的使用

Roblox 为开发者提供大量的免费模型与插件素材,但即使是最为热门的素材,在使用前也应对其进行详细检查。当使用免费模型或插件素材时:

  1. 检查其是否包含任何脚本ScriptLocalScript)。

  2. 若是,则请仔细检查脚本,分辨其中是否存在不合常理的内容,如添加模型、访问之前从未听说过的服务等。

  3. 如果无法分辨代码用途,请尝试对其进行研究或调查。无法独自进行分辨时,可前往 Roblox 社区,寻求各位活跃成员的帮助。

  4. 即使你认为代码中并不存在安全漏洞,无论是在 Studio 中还是发布到 Roblox 后,都请对游戏进行认真测试。如果游戏在添加免费模型或插件后产生预期外的行为,请先删除新添加的模型或插件,再查看问题是否仍然存在。

服务器端验证

Articles/Remote Functions and Events|远程函数和事件是客户端与服务器之间的通讯的最佳选择,但其安全性并非毫无漏洞。部分十分狡猾的黑客可能会伪造远程事件或对事件传递的值进行更改。因此在收到请求时,开发者应当使用基本的服务器端验证来确认其真实性。

举例来说,游戏中存在供玩家进行购买的商店系统。玩家购买物品时将与客户端侧的界面交互(例如包含“购买”按钮的Articles/Intro to GUIs|屏显 GUI)。玩家按下按钮后,客户端将向服务器发送远程事件,请求购买。但服务器这一最可靠的游戏管理者必须检查玩家是否有足够的货币完成此次购买行为。

https://developer.roblox.com/assets/blt5fcdc8ffa5581b4b/RemoteEvent-Flow.png

请注意 RemoteFunction 的错误将传递给客户端,因此秘密 URL可能会被泄露。

禁用 “loadstring()”

在绝大多数情况下,开发者应当禁用 Lua 语言中的 loadstring() 函数(默认即为禁用)。虽然此函数功能强大,但也可能会破坏游戏的安全性:该函数允许在运行时执行任意和动态代码。禁用此函数后,服务器上的任何 Script 在尝试调用 loadstring() 时都会报错。

此设置可在 LoadStringEnabled 下的 ServerScriptService 属性中找到。

https://developer.roblox.com/assets/blt5628115ec6b84c87/LoadStringEnabled.png

loadstring() 函数无法在客户端上用于 LocalScript 中。此功能已禁用,如试图使用将会报错。

Roblox官方链接:游戏安全