任何玩家都可以通过浏览器控制台更改纸杯蛋糕的数量轻松欺骗这款游戏。我想知道是否有办法阻止用户这样做。这也发布在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 = "        " + 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();
答案 0 :(得分:6)
呀!正如其他答案所提到的,阻止用户从浏览器控制台更改值是不可能。换句话说,您只是要求如何编写JS代码以便用户无法对其进行调试。你可以随时使用一些方法,让想要在游戏中作弊的人生活艰难。
1.验证代码。
查看这些链接以获取有关混淆的更多信息。
2.不要将游戏的控制值存储在全局变量中。
不要将控制值存储在全局变量中。而是定义一个类并将这些变量作为私有变量,以便用户必须深入挖掘才能找到断点的位置。
3.Minify /压缩你的javascripts。
混淆或多或少也包括缩小。
答案 1 :(得分:3)
你无法阻止这一点。你能做的最好就是缩小JS,这样玩家就更难找到合适的值来改变。事实上,你不能用任何游戏或实际应用来防止这种情况;用户的计算机控制所有信息,以便他们可以做任何他们想做的事情。
防止这种情况的唯一方法是在您控制的服务器上执行所有处理。即使玩家可能会对他们的输入数据撒谎(因此也会瞄准目标或其他黑客攻击)。
答案 2 :(得分:3)
通过浏览器控制台更改纸杯蛋糕的数量
从技术上讲,您可以通过创建新范围来阻止这种情况:
(function(){
var cupcakes = 10;
})();
console.log(cupcakes); // ReferenceError: cupcakes is not defined
但请注意,即使有这种保护(即编辑JS源代码),仍然有“欺骗”的方法。如果您要将结果发送到服务器 ......那么即使不是不可能保护也会更加困难,因为您可以通过XMLHttpRequest
轻松发送简单的HTTP请求。 / p>
答案 3 :(得分:0)
实际上可能有办法实现目标。但这取决于游戏的逻辑。
如果您可以在服务器上模拟游戏,则可以为蛋糕生成随机ID,当游戏创建新蛋糕(在客户端上)时,它会为其请求ID。蛋糕被“销毁”后,它会联系服务器并提供蛋糕ID。然后根据收到的ID在服务器上计算最终得分。
通过这种方式,您可以跟踪用户实际执行的操作。
但攻击者可以侦听网络请求并确定创建新ID的请求。他可以通过相同的方式确定告诉服务器这个ID已被“销毁”的请求。
如果您的游戏逻辑允许,您可以例如告诉服务器每5秒左右只生成一个ID。您还可以将所有结果标记为欺骗性所有结果,其中所有蛋糕都被“销毁”并且没有错过(如果游戏足够困难)。
因此,它仍然不是100%安全,但您可能能够达到相对较高级别的欺骗保护。另一方面,它增加了许多代码复杂性,你必须权衡利弊。