如何保护远程事件和函数在roblox中的安全性?

在我的游戏中,我有一个用于枪的本地脚本,它触发了一个远程事件来更改玩家的健康值。问题是黑客可能会触发远程事件来更改玩家的健康值。我该如何防止这种情况发生?这是远程事件:

script.CHealth.OnServerEvent:connect(function(player,humanoid,amnt)
    humanoid.Health = humanoid.Health - amnt
end)

这是它被调用的地方:

game.Workspace.RemoteEvents.CHealth:FireServer(humanoid,60)
点赞
用户8371176
用户8371176

一个简单的答案就是在脚本中创建远程事件,用完后将其删除。此外,永远不要将远程事件/函数放在工作区,最安全的地方是放在复制存储中。

local remoteevent = Instance.new("RemoteEvent")
remoteevent.Parent = game.ReplicatedStorage.RemoteEvents
remoteevent.Name = "CHealth"
game.ReplicatedStorage.RemoteEvents.CHealth:FireServer(humanoid,60)

另一个脚本:

script.CHealth.OnServerEvent:connect(function(player,humanoid,amnt)
    humanoid.Health = humanoid.Health - amnt
    game.ReplicatedStorage.RemoteEvents.CHealth:Remove()
end)

这只是我想到的第一个方法。我没有测试脚本,可能有一些拼写错误之类的,如果出现错误,你可以考虑一下。

如果有人在启用过滤的情况下进行黑客攻击,然后触发该事件,对他们来说只会显示他们受到了伤害。此外,我认为黑客是注入服务器脚本,而服务器脚本不适用于客户端。以下是一些好的文章:http://wiki.roblox.com/index.php?title=Experimental_Mode | http://wiki.roblox.com/index.php?title=Building_Games_with_Experimental_Mode_Off

2017-09-17 12:15:43
用户8397336
用户8397336

最好的方法是让你的代码没有漏洞。 因为玩家可以轻易利用漏洞添加他们自己的生命值,因此你应该先检查数字是否为负数(使用 math.sign)。

接下来,创建一个随机密钥。 最好的方法是在客户端上设置一个键变量为 0,在服务器上也设置一个键变量为 0。在客户端创建一个函数,整个客户端将使用该函数,它会用该密钥触发远程事件,但也会执行一些诸如加 1 乘以 100(或更复杂的操作)之类的操作。每次触发远程事件时,在服务器上执行相同的操作。在服务器上的每个事件中,检查提供的密钥是否与服务器上的相同,如果不是,则将其踢出。这样,利用者将无法在没有密钥的情况下触发远程事件,而他们也无法获取密钥。

2017-12-13 02:43:45