【问题标题】:How to protect remote events and function roblox?如何保护远程事件和功能 roblox?
【发布时间】:2018-01-06 10:48:57
【问题描述】:

在我的游戏中,我有一个本地枪支脚本,可以触发远程事件来改变玩家的健康状况。问题是黑客可以触发远程事件并改变玩家的健康状况。我该如何阻止这种情况发生?这是远程事件:

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

这就是它的名字:

game.Workspace.RemoteEvents.CHealth:FireServer(humanoid,60)

【问题讨论】:

  • 可能你应该在服务器端做一些额外的检查来确定那个字符是否可以减少另一个字符的生命值。例如,如果它们彼此相距太远,则应拒绝此操作。通常,客户端向服务器发送如下消息:“我正在朝那个方向射击”,然后服务器完成所有其他工作:检查谁在火线上以及当前武器可以造成多少生命值(服务器也可以给这个事件添加随机性)。
  • 一般来说,永远不要相信客户。您应该在服务器上进行损坏计算和光线。因此,您应该有一个发射弹丸的事件,而不是一个伤害玩家的事件。让服务器完成安全关键的工作 - 否则没有办法。

标签: lua roblox


【解决方案1】:

最好的方法是不要让您的代码有任何漏洞。玩家可以很容易地利用它来给他们自己的健康,所以你应该首先检查这个数字是否为负数(math.sign)。

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

【讨论】:

    【解决方案2】:

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

    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

    【讨论】:

      猜你喜欢
      • 2016-06-18
      • 2022-10-14
      • 1970-01-01
      • 1970-01-01
      • 2013-02-27
      • 1970-01-01
      • 1970-01-01
      • 2019-12-27
      • 2011-06-26
      相关资源
      最近更新 更多