繁体   English   中英

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

[英]Prevent user from changing game values in the browser console

任何玩家都可以通过浏览器控制台更改纸杯蛋糕的数量轻松欺骗这款游戏。 我想知道是否有办法阻止用户这样做。 这也发布在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.批量处理代码。

有关混淆的更多信息,请查看这些链接。

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

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

3.Minify /压缩你的javascripts。

混淆或多或少也包括缩小。

你不能阻止这一点。 你能做的最好就是缩小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%安全,但您可能能够达到相对较高级别的欺骗保护。 另一方面,它增加了许多代码复杂性,你必须权衡利弊。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM