当前位置: 首页 > 面试题库 >

有什么好的方法可以防止JavaScript多人游戏作弊?

苏硕
2023-03-14
问题内容

想象一下具有滚动级别的太空射击游戏。有哪些方法可以防止恶意玩家修改游戏以使其受益?他可以做的很难限制服务器端的事情是自动瞄准,在可见区域外偷看,加速黑客攻击等。

有什么方法可以防止这种情况发生?假定服务器是任何语言,并且客户端通过WebSocket连接。

始终假定代码是100%可入侵的。想办法防止客户完全重写(出于作弊目的)作弊。这些可能是诸如编写安全游戏协议的方法,服务器端检测等。


问题答案:

服务器为王。客户端是可入侵的。

您想要做的是Websocket的两件事。

将游戏动作发送到服务器,并从服务器接收游戏状态。

您呈现游戏状态。然后您将输入发送到服务器。

  • 自动瞄准-这很难解决。您必须追求现实。如果用户在10毫秒内击中10次爆头,则您将其踢了。编写巧妙的作弊检测算法。
  • 在可见区域外偷看-通过仅向每个客户发送可见区域来解决
  • 加快骇客入侵-通过正确处理输入来解决。您会收到一个事件,该事件使用户向前移动,并控制用户前进的速度。

你可以 解决由涅槃代码这些问题。客户端上的代码 用于处理输入和显示输出。 所有 逻辑都必须在服务器上完成。

您只需要编写服务器端 验证 。唯一的问题是,由于复杂性,游戏输入要比表单输入更难于验证。您要做的就是确保表单安全完全相同。

不过,您必须非常小心“输入有效”检测。您不想踢/禁制高技能的球员。很难在僵尸程序检测过于宽松与僵尸程序检测之间达到平衡。总体而言,僵尸程序检测的整个领域非常困难。例如,雷神之锤具有自动瞄准检测功能,该技术可以在当天将合法的玩家踢回去。

至于阻止机器人连接到您的websocket,则直接在多人游戏上设置单独的HTTP或HTTPS验证通道,以提高安全性。使用多个Http / https /
ws通道来验证客户端是否为“正式”客户端,作为某种形式的握手。这将使直接连接到ws更加困难。

例:

想想一个简单的多人游戏。一个基于2D房间的赛车游戏。多达n位用户在平面2D平台游戏者地图上竞争从A到B的竞争。

假设出于争论的目的,您有一个安全的系统,其中在HTTPS通道上进行了复杂的身份验证,因此用户无法直接访问您的websocket通道并被迫通过浏览器。您可能有一个用于身份验证的chrome扩展程序,并强迫用户使用它。这减少了问题域。

您的服务器将发送客户端渲染屏幕所需的所有可视数据。您不能掩盖这些数据。无论您尝试什么,一个愚蠢的黑客都可以拿走您的代码,并在调试器中放慢代码的速度,直到他剩下的只是围绕您的websocket的原始包装。他让你运行整个身份验证,但没有
什么 可以做,以从阻止他这样做,剥出你写任何JavaScript阻止他。您所能实现的一切就是限制足够熟练地访问Websocket的黑客数量。

因此,黑客现在将您的Websocket放在了一个chrome沙箱中。他看到输入。当然,您的比赛路线是动态且唯一生成的。如果您有一定数量的密码,那么黑客可以预先设计最佳的竞赛路线。可以更快地呈现为可视化此地图而发送的数据,然后可以与人与您的游戏进行人机交互,并且可以计算出赢得赛车游戏的最佳举动并将其发送到服务器。

如果您想禁止对您的地图数据反应过快的玩家并称其为机器人,那么黑客会对此进行调整并增加延迟。如果您尝试禁止玩得过分完美的玩家,那么黑客会对此进行调整,并使用随机数将其玩得不那么完美。如果在地图中放置只有算法机器人属于的陷阱,则可以通过反复试验或机器学习算法来了解它们,从而避免它们。您无法采取任何措施确保绝对安全。

您只有 一个
选择可以绝对避免黑客入侵。那就是建立自己的浏览器,它不会被黑客入侵。在浏览器中构建安全机制。不允许用户在运行时实时编辑JavaScript。



 类似资料:
  • 问题内容: 我必须为我的OJT公司编程一个应用程序管理系统。前端将在C#中完成,后端将在SQL中完成。 现在,我从来没有做过这样的项目。在学校里,我们只有关于SQL的基本课程。不知何故,我们的老师完全没有讨论SQL注入,而我直到现在才通过网上阅读与之接触。 所以无论如何,我的问题是:如何防止C#中的SQL注入?我模糊地认为,可以通过适当地屏蔽应用程序的文本字段来做到这一点,以使其仅接受指定格式的输

  • 问题内容: 我有很多自定义的javascript和布局设计,并且我想阻止人们使用它们。有什么实际的方法可以做到这一点,还是我基本上只需要高兴我的php代码不显示?我至少要使复制网站变得困难。 问题答案: 如果人们真的想访问您的源代码,他们可以很轻松地做到这一点。 通过混淆代码,可以在一定程度上降低人员的速度。 维护混淆的代码很困难。您要做的是在部署之前对其进行模糊处理,以便可以使用常规版本进行测试

  • 每2个玩家,服务器将创建1个房间(我的游戏是PvP,一对一) 每个房间处理游戏逻辑 我将使用作为我的游戏循环 服务器FPS=5 每个房间都可以处理玩家的移动和一些物理操作 关于实际问题: 基于下面的点数,我应该使用什么样的游戏循环?下面每种类型的游戏循环的利弊是什么。 null

  • 问题内容: 我说的是一个动作游戏,没有最高分数限制,也没有办法通过重播动作等来验证服务器上的分数。 我真正需要的是Flash / PHP中最强大的加密功能,以及一种防止人们通过我的Flash文件以外的方式调用PHP页面的方法。过去,我尝试过一些简单的方法,可以对单个分数进行多次调用,并完成校验和/斐波那契序列等,还使用Amayeta SWF Encrypt对SWF进行模糊处理,但最终它们都被黑了。

  • 有什么方法可以防止一个字段在Jackson中反序列化吗?但是我需要序列化我用@JsonIgnoreProperties尝试字段,这阻止了序列化和反序列化。

  • 问题内容: 我想防止用户拍摄网页的屏幕截图。我必须在该.html文件中放置什么代码? 防止像打印屏幕那样按下按钮的代码应该是什么?因为许多网站禁止用户按任何键。 问题答案: 有可能的。试试这个css3功能。