Network programming I';我正在制作一个多人游戏,我需要验证玩家是否';快速黑客攻击
出于安全原因,我觉得应该在服务器端进行测试。尽管如此,这对服务器来说还是相当费力的,对吗?考虑到玩家穿戴的装备和buff,他们将有更高的移动速度,因此每次他们移动时,我都需要计算新的常数,看看他们的移动是否合法(使用TCP,因此不必担心丢失、无序的数据包)。我意识到我可以只保存上一次的移动速度,只有当他们改变了影响他们速度的东西时才重新计算,但即使这样,那也是另一次检查 我的另一个想法是,服务器随机选择客户端发送的数据,并对其进行验证,然后给每个客户端一个信任评级。足够低的信任等级意味着来自客户端的每条消息都将被检查,他们的所有操作都将以更详细的方式记录。然后,我会通过检查日志来知道他们在进行黑客攻击,并可以禁止/暂停这些日志,以及撤销他们可能通过黑客攻击传播的任何好处 谢谢你的建议Network programming I';我正在制作一个多人游戏,我需要验证玩家是否';快速黑客攻击,network-programming,Network Programming,出于安全原因,我觉得应该在服务器端进行测试。尽管如此,这对服务器来说还是相当费力的,对吗?考虑到玩家穿戴的装备和buff,他们将有更高的移动速度,因此每次他们移动时,我都需要计算新的常数,看看他们的移动是否合法(使用TCP,因此不必担心丢失、无序的数据包)。我意识到我可以只保存上一次的移动速度,只有当他们改变了影响他们速度的东西时才重新计算,但即使这样,那也是另一次检查 我的另一个想法是,服务器随机选择客户端发送的数据,并对其进行验证,然后给每个客户端一个信任评级。足够低的信任等级意味着来自客户
编辑:我刚刚意识到还有一种情况,黑客可以连续发送非常高的微小动作(在其正常速度的能力范围内)。每一个单独的动作都是合法的,但累积的效果将是速度攻击。有哪些解决方法?解决方法是所有操作都在服务器上完成。永远不要相信来自客户的任何信息。如果有人真的玩你的游戏,有人会反向工程与服务器的通信,并找出如何利用它 你不能分配一个随机的信任等级,因为谨慎的骗子只有在他们真正需要的时候才会作弊。这给了他们相当大的优势,被发现作弊的几率很低
而且,是的,这意味着您无法使用低级服务器,但实际上没有其他方法可以防止客户端欺骗。解决方法是所有操作都在服务器上完成。永远不要相信来自客户的任何信息。如果有人真的玩你的游戏,有人会反向工程与服务器的通信,并找出如何利用它 你不能分配一个随机的信任等级,因为谨慎的骗子只有在他们真正需要的时候才会作弊。这给了他们相当大的优势,被发现作弊的几率很低 是的,这意味着你不能使用低级服务器,但实际上没有其他方法可以防止客户端欺骗 […]测试应该在服务器端完成。尽管如此,这对服务器来说还是相当费力的,对吗 没有。这是做这件事的方法。这是唯一的办法。所有关于检查信任或任何固有缺陷的讨论,都是这样或那样的 如果您让玩家发送位置:
- 检查某人声称他们在哪里
- 与他们不久前的情况相比。允许一点偏差来解释网络延迟
- 如果它们移动得太快,请将它们重新定位到更合理的位置。小的误差可能是由于长时间的滞后,所以客户应该使用插值来平滑这些校正
- 如果它们移动得太快,请断开它们的连接。并检查代码中的错误
- 不要忘记处理远距离的合法穿越,例如远程传送
- 检查某人声称他们在哪里
- 与他们不久前的情况相比。允许一点偏差来解释网络延迟
- 如果它们移动得太快,请将它们重新定位到更合理的位置。小的误差可能是由于长时间的滞后,所以客户应该使用插值来平滑这些校正
- 如果它们移动得太快,请断开它们的连接。并检查代码中的错误
- 不要忘记处理远距离的合法穿越,例如远程传送
- 处理此问题的标准方法是让服务器计算所有移动。客户端应发送给服务器的唯一内容是命令,例如“向左移动”,然后服务器应计算玩家移动的速度等,最后将更新的位置发送回客户端
如果您将任何计算留在客户端上,很可能迟早会有人找到作弊的方法。处理此问题的标准方法是让服务器计算所有移动。客户端应发送给服务器的唯一内容是命令,例如“向左移动”,然后服务器应计算玩家移动的速度等,最后将更新的位置发送回客户端
如果您将任何计算留在客户端上,很可能迟早会有人找到作弊的方法。如果您使用的是一种可以访问Windows API函数调用的语言,我从自己对速度黑客的研究中发现,通过调用两个函数并比较结果,您可以轻松识别速度黑客 而且 这两个函数都将返回系统启动后的秒数。但是,TimeGetTime比GetTickCount准确得多,而
TimeGetTime
的准确度高达~1ms,而GetTickCount
的准确度约为~50ms
即使这两个功能之间有一个小的延迟,如果你打开一个速度黑客应用程序(选择你的毒药),你应该