security - 如何在 JS 游戏中实现反作弊?
问题描述
我打算制作一个基于网络的游戏(使用three.js 和socket.io),我主要关心的一个问题是防止作弊。
我知道制作安全游戏的基础知识,即:
- 永远不要相信客户端,客户端仅用于渲染和输入捕获
- 将您的游戏逻辑放在服务器端
- 最好的反作弊是人类
知道这一点,我不知道如何保护的漏洞正是那些与客户端有关且服务器无法检查的漏洞。例如,作为攻击者,我可以:
- 修改渲染器或着色器以使墙不可见(wallhack)
- 修改相机的位置,这只是在一个变量中
- 注入将为我输入的代码(aimbot)
在经典游戏(可执行文件)中,有可以检测非法操作的程序。通常,反作弊程序会检查程序集并检查是否没有注入 dll。
也许有一个专门从事这项任务的混淆器(即使这意味着失去性能)?
我还没有完成所有的研究,但我希望你们中的一些人已经面临这个问题,并且可以通过定位我的研究来节省我很多时间。
非常感谢
解决方案
如果你想做一个“反作弊”引擎,你就必须这样做。你可以在客户端添加任何你想要的东西,以促进服务器端的工作,但你绝不能信任客户端。您拥有的所有逻辑必须至少是服务器端的。如果需要,您可以在客户端复制它,但没有客户端唯一的解决方案可以做到这一点。
基础知识之后:如果您不介意包装 HTTP,那么使用 ExpressJS 看一下 express-blacklist 和 express-defend 的代码:
var expressDefend = require('express-defend');
var blacklist = require('express-blacklist');
app.use(blacklist.blockRequests('blacklist.txt'));
app.use(expressDefend.protect({
maxAttempts: 5,
dropSuspiciousRequest: true,
logFile: 'suspicious.log',
onMaxAttemptsReached: function(ipAddress, url){
blacklist.addAddress(ipAddress);
}
}));
因为它们没有在 socket.io 中注册,所以它们只会受到 Express 路由的影响
看看这个:https ://github.com/hrt/AnticheatJS
这是您可能想要研究的好软件:https ://www.tuxbihan.org/software/top-05-anti-cheat-software-to-make-fair-for-gamers/
希望这可以帮助!
推荐阅读
- python - 打印行作为包含特定值 Pandas 的样本
- sql - 计算 SQL Server 中具有部分重叠 StartTime 和 EndTime 值的记录的总时间
- heroku - 更改 heroku 部署分支
- mongodb - 一个查询为仪表板连接多个 Mongo 数据库
- firebase - 使用颤振从 Firestore 获取数据?
- assembly - x86-64 汇编语言中 fscanf 的崩溃
- html - VBA刮表每个单元格
- c++ - 通过 boost::asio 安全地使用 shared_ptr 和 lambda 回调
- graph-algorithm - 在有向图中的两个顶点之间遍历尽可能多的边
- windows - Windows 在 destop 上使用鼠标指针变慢