Bli*_*ixt 31 javascript security multiplayer
想象一下具有滚动水平的太空射击游戏.有什么方法可以阻止恶意玩家修改游戏以使其受益?他能做的事情很难限制服务器端是自动瞄准,在可见区域外窥视,加速黑客攻击和其他事情.
有什么方法可以防止这种情况发生?假设服务器是任何语言,客户端通过WebSocket连接.
始终假设代码是100%可攻击的.想办法防止客户完全重写(作弊的目的)作弊.这些可以是诸如编写安全游戏协议的方法,服务器端检测等.
Ray*_*nos 36
服务器是王道.客户是可以破解的.
您想要做的是使用websocket做两件事.
将游戏操作发送到服务器并从服务器接收游戏状态.
您渲染游戏状态.并将输入发送到服务器.
你可以不解决由涅槃代码这些问题.客户端上的代码仅用于处理输入和显示输出.所有逻辑都必须在服务器上完成.
您只需编写服务器端验证.唯一的事情是游戏输入由于复杂性而难以验证然后形成输入.这与使表单安全的方式完全相同.
你需要非常小心你的"输入有效"检测.你不想踢/禁止游戏中的高技能玩家.很难达到机器人检测过于宽松和机器人检测过于严格的平衡.整个机器人检测领域非常困难.例如,Quake有一个自动目标检测功能,可以在当天恢复熟练的熟练玩家.
至于停止机器人连接到您的websocket,直接在您的多人游戏中设置单独的HTTP或HTTPS验证通道,以增加安全性.使用多个Http/https/ws通道将客户端验证为"官方",充当某种形式的握手.这将使得与ws的连接更加困难.
例:
想想一个简单的多人游戏.基于2D房间的赛车游戏.最多n个用户使用平面2D平台地图并竞赛从A到B.
让我们假设您有一个傻瓜系统,其中有一个复杂的验证通过HTTPS通道,以便用户无法直接访问您的websocket频道,并被迫通过浏览器.您可能有一个处理身份验证的Chrome扩展程序,并强制用户使用它.这减少了问题域.
您的服务器将发送客户端呈现屏幕所需的所有可视数据.你无法掩盖这些数据.无论你尝试什么,一个愚蠢的黑客都可以把你的代码放慢,然后在调试器里慢慢编辑它,直到他所有的东西都是你的websocket的原始包装器.他让你运行整个身份验证,但没有什么可以阻止他删除你写的任何JavaScript,阻止他这样做.你所能达到的只是限制了黑客熟练访问你的websocket的数量.
所以黑客现在将你的websocket放在一个镀铬沙盒中.他看到了输入.当然,您的赛道是动态且独特的.如果你有一定数量的黑客,那么黑客可以预先设计出最佳的竞赛路线.您发送的可视化此地图的数据可以更快地呈现,然后人工与您的游戏互动,并且可以计算出赢得您的赛车游戏的最佳动作并发送到您的服务器.
如果你试图禁止那些对你的地图数据反应太快的玩家并称他们为机器人,那么黑客会调整这个并增加延迟.如果你试图禁止那些玩得太完美的玩家,那么黑客就会调整这个并使用随机数来减少玩法.如果您在地图中放置陷阱,只有算法机器人会陷入困境,那么可以通过试验,错误或机器学习算法来了解陷阱.没有什么可以做到绝对安全.
你只有一个绝对避免黑客的选择.那就是建立自己的浏览器,不能被黑客攻击.在浏览器中构建安全机制.不允许用户在运行时实时编辑javascript.
| 归档时间: |
|
| 查看次数: |
5666 次 |
| 最近记录: |