1

我想知道用户/浏览器手动操作或执行 Javascript 代码有多容易。

我问的原因是我计划制作一个基于浏览器的游戏。我使用 Javascript 而不是 Java,因为我想让尽可能多的平台可以访问它。

这是我的意思的一般示例:用户可能会进入游戏页面。几个变量将存储在 JS 中,例如玩家的健康和力量值。玩家可能会选择攻击怪物,结果由几个存储的变量和在战斗中生成的一对决定。

那么玩家是否能够操纵存储的变量或调用我的 JS 函数之一(例如导致进行 AJAX 调用的函数)?

如果是这样,那我该如何防范呢?我可以使用服务器验证每个操作,但这是带宽密集型的。

4

4 回答 4

3

点击F12,打开控制台,破解。

全局范围内的任何内容都容易受到修改。

然而,通过将你的游戏逻辑封闭在一个闭包中,它变得更难访问。

所以:

(function() {
    // all your game code here
})();

这将阻止访问局部变量。只要确保你用var.

此外,请确保混淆代码以使其更难修改,并在接受诸如高分提交之类的通信时要特别小心。我喜欢用现场制作的方法加密我的(例如从基数 10 转换为基数 42)。

尽可能将玩家的动作发送到服务器并确保它们是有效的。如果可以,请在服务器端保持游戏状态 - 部分是为了检查玩家是否按照规则进行游戏,但作为副作用,如果用户重新加载页面,您可以恢复游戏。

总而言之,你无法阻止作弊者,但你可以让他们很难受。

于 2012-04-05T21:10:49.033 回答
0

你有没有打开你的开发者控制台?您可以访问页面中运行的所有脚本。任何加载的东西都可以被操纵。

您可以通过在特定闭包中运行代码来使其更难。这个关于闭包的 SO 答案可能有助于澄清事情:JavaScript 闭包如何工作?

但是由于这都是客户端,如果有人真的想进入那里并改变事情以使自己受益,因为 JavaScript 允许运行时内省,所以没有什么是不可能的。

于 2012-04-05T21:09:31.647 回答
0

以这种方式防止作弊的唯一方法是与服务器验证所有操作。即使玩家无法使用适当的工具(他们可以)访问所有 javascript,他们也可以在网络级别攻击系统。

唯一的选择是如果 javascript 以某种方式获得了受信任的平台模块 API。

于 2012-04-05T21:24:11.250 回答
0

您可能无法防止操纵真实值,但您可能会通过验证使其变得更复杂一些。

这就是我的意思。假设您正在保护健康价值,假设它被命名为“helath”。您声明了另一个健康值,假设我们将其命名为“hcheck”,但您不使其等于健康值。你给它一个-52或+786或其他的偏移值......你也可以存储异或值或者......有创意。稍后,您只需检查健康值是否对应于 hcheck 值,如果不对应,则将实际值解码回健康值。

当然,如果你愿意,你可以加盐更多,第三个值将是 health 和 hchek 值之间的某种计算。

让我们清楚一点。这并不能保证它会受到 100% 的保护,但它会让新手的事情变得复杂,更有经验的人根本不想浪费他们的时间,即使有第三个保护值(你可能永远不知道)有多少保护值/层):)

哦,如果有人有时间和勇气跟随你的脚步并修复每个变量中的值,那么他们应该作弊;)

于 2020-03-22T17:37:50.987 回答