可以采取什么措施来防止多人黑客攻击?

Bur*_*tto 4 c# unity-game-engine

出于好奇,我一直在研究 UDP 网络项目,但我遇到了一个我无法解决的问题。我研究并理解了以下基本原理:

  1. 使用权威服务器,并给予客户端尽可能少的权限。
  2. 确保服务器使用其自己的加密密钥唯一地标识每个客户端。
  3. 通过膨胀响应数据包来阻止 DDOS 攻击。
  4. ETC..

我对 UDP 的大部分知识都来自于这些精彩的文章:https://gafferongames.com/ ;我很幸运能够使用这个,它基于作者自己的 UDP 协议并负责大部分权威保护。

现在,这是我的问题:

使用完全权威的服务器,玩家似乎仍然可以作弊。

  • 例如:

    对于格斗游戏来说,客户端有两个功能。void hit()并且void hurt,这些是让客户端刺激战斗的基本功能。

    在场景 1 中:本地玩家击中其他玩家,并将其发送到服务器。然后,服务器向被击中的玩家的客户端发送一个数据包,这将触发该hurt()功能。但如果玩家编辑了文件并删除了伤害功能,就不会发生任何事情。删除了该功能的玩家hurt()将是无敌的。

    在场景 2 中: localPlayer 被其他玩家击中并调用hurt(),并将其发送到服务器。然后,服务器将一个数据包发送到命中 localPlayer 的播放器客户端,这将触发该hit()函数。但如果 localPlayer 编辑了文件并删除了该hurt()功能,则不会发生任何情况。删除该功能的玩家hurt()将再次无敌。

我只能想到两个解决方案:

  1. 如果游戏遇到错误(因为某个功能被删除并且不存在),请断开客户端与服务器的连接。(不太好)

  2. 我在写这篇文章时想到了这一点,这可能是我的解决方案:为服务器上的每个玩家存储一个健康变量,如果它达到 0,则忽略如果游戏未编辑则不可能的任何数据包。

现在,第二个解决方案对我来说听起来不错,但我很好奇你们会做什么/会做什么,因为我是一个纯粹的初学者。很高兴听到任何建议,谢谢!

pkp*_*pnd 5

删除了该功能的玩家hurt()将是无敌的。

如果游戏状态的“主副本”是由服务器计算的,则不会。在这种情况下,修改代码的玩家只会让他们的客户端显示无效的游戏状态,这对他们玩游戏没有帮助。

一般来说,除了玩家输入之外的所有事情都必须由服务器完成,客户端仅说明玩家选择做什么,并且每个结果操作/更改都由服务器执行。这样,玩家除了想做的事之外不能改变任何事情,而这已经在他们的管辖范围内。

请注意,玩家仍然可以借助自动点击器或瞄准机器人等工具进行作弊。这些形式的作弊行为更难处理,因为很难判断某人是否正在接受不人道的帮助,或者他们是否只是一名优秀的玩家。