首页 > 解决方案 > 如何在 JS 游戏中实现反作弊?

问题描述

我打算制作一个基于网络的游戏(使用three.js 和socket.io),我主要关心的一个问题是防止作弊。

我知道制作安全游戏的基础知识,即:

知道这一点,我不知道如何保护的漏洞正是那些与客户端有关且服务器无法检查的漏洞。例如,作为攻击者,我可以:

在经典游戏(可执行文件)中,有可以检测非法操作的程序。通常,反作弊程序会检查程序集并检查是否没有注入 dll。

也许有一个专门从事这项任务的混淆器(即使这意味着失去性能)?

我还没有完成所有的研究,但我希望你们中的一些人已经面临这个问题,并且可以通过定位我的研究来节省我很多时间。

非常感谢

标签: securitywebthree.jsgame-engineanti-cheat

解决方案


如果你想做一个“反作弊”引擎,你就必须这样做。你可以在客户端添加任何你想要的东西,以促进服务器端的工作,但你绝不能信任客户端。您拥有的所有逻辑必须至少是服务器端的。如果需要,您可以在客户端复制它,但没有客户端唯一的解决方案可以做到这一点。

基础知识之后:如果您不介意包装 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/

希望这可以帮助!


推荐阅读