阻止用户在浏览器控制台中更改游戏值

Prevent user from changing game values in the browser console

本文关键字:游戏 控制台 用户 浏览器      更新时间:2023-09-26

任何玩家都可以通过浏览器控制台更改纸杯蛋糕的数量,轻松在游戏中作弊。我想知道是否有办法阻止用户这样做。这也发布在github上。

var numberOfCupcakesDisplay = document.getElementById("numberOfCupcakes");
var cupcake = document.getElementById("cupcake");
function updateValues() {
    numberOfCupcakesDisplay.innerHTML = amountOfCupcakes.toString();
    //displays number of cupcakes to screen
    document.getElementById("amountOfToasters").innerHTML = amountOfToasters.toString();
    //displays number of toasters to screen
    document.getElementById("toasterButton").innerHTML = "&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp" + Math.round(costOfToasters).toString() + " cc";
    //changes cost of toaster every time it is bought by 110%
}
cupcake.addEventListener('webkitAnimationEnd', function(e){
    e.preventDefault();
    this.style.webkitAnimationName = '';
}, false);
function clickCupcake() {
    ++amountOfCupcakes;
    cupcake.style.animation = "shiftCupcake";
    cupcake.style.webkitAnimationName = "shiftCupcake";
}
updateValues();

是的!!正如其他答案所提到的,防止用户从浏览器控制台更改值是不可能的。换句话说,您只是在问如何编写JS代码,这样用户就无法调试它。你总是可以使用一些方法,让那些想在游戏中作弊的人的生活变得艰难。

1.混淆代码。

查看这些链接以获取有关模糊处理的更多信息。

  • SO:如何混淆Javascript
  • Jsobfuscate.com

2.不要将游戏的控制值存储在全局变量中。

不要将控制值存储在全局变量中。相反,定义一个类,并将这些变量作为它的私有变量。因此,用户必须深入挖掘,才能找到放置断点的位置。

3.最小化/压缩您的java脚本。

混淆或多或少也涵盖了缩小。

您无法阻止这种情况。你能做的最好的事情就是缩小JS,这样玩家就更难找到合适的值来改变。事实上,任何游戏或应用程序都无法阻止这种情况的发生;用户的计算机控制所有的信息,这样他们就可以对它做任何他们想做的事情

防止这种情况发生的唯一方法是在您控制的服务器上进行所有处理。即使如此,玩家也可以在输入数据上撒谎(因此进行瞄准或其他黑客攻击)。

通过浏览器控制台更改纸杯蛋糕的数量

从技术上讲,你可以通过创建一个新的范围来防止这种情况:

(function(){
    var cupcakes = 10;
})();
console.log(cupcakes); // ReferenceError: cupcakes is not defined

但请注意,即使有这种保护(即编辑JS源代码),仍然有"作弊"的方法。如果您将结果发送到服务器。。。好吧,如果不是不可能的话,这将更加困难,因为您可以通过XMLHttpRequest轻松地发送一个简单的HTTP请求。

实际上可能有一种方法可以达到你的目标。但这取决于游戏的逻辑。

如果你可以在服务器上模拟游戏,你可以为蛋糕生成随机ID,当游戏(在客户端上)创建新蛋糕时,它会请求一个ID。稍后,当蛋糕被"销毁"时,它将联系服务器,并向其提供蛋糕的ID。然后,在服务器上根据收到的ID计算最终得分。

通过这种方式,您可以跟踪用户实际做了什么。

但对手可以监听网络请求,并确定创建新ID的请求。同样,他也可以确定请求,告诉服务器该ID已被"销毁"。

如果你的游戏逻辑允许,你可以告诉服务器每5秒左右只生成一个ID。你还可以将所有蛋糕都被"销毁"且没有遗漏的所有结果标记为伪造(如果游戏足够困难的话)。

因此,它仍然不是100%安全的,但您可能能够达到相对较高的欺骗保护级别。另一方面,它增加了许多代码复杂性,您必须权衡利弊。