【问题标题】:HTML5 game - how to protect against modification of variablesHTML5 游戏 - 如何防止修改变量
【发布时间】:2012-10-17 23:03:24
【问题描述】:

我在画布中编写了 HTML5 游戏,但遇到了问题。

我是这样使用 var 的:

var score = 0;
// another code 
++score;

但用户可以编辑该变量(例如在 FireBug 或 Chrome 编辑器中) - 得分被黑。

有什么想法吗?

【问题讨论】:

    标签: javascript jquery html canvas protection


    【解决方案1】:

    Javascript 是客户端执行的。客户端上发生的任何事情都可以由它控制。没有其他办法了。您可以尝试混淆您的代码,但这只会使找出如何作弊变得更加困难。它无法阻止一个足够坚定的人。

    设计防作弊游戏的唯一方法是在服务器上完成所有游戏机制。这当然在技术上更具挑战性,当用户连接不良时会影响游戏体验,并且会因为您需要更多的服务器容量而花费您额外的资源,但这是唯一的方法。

    顺便说一句:我们有一个姊妹网站http://gamedev.stackexchange.com,专门用于解答有关游戏开发的问题。你可能会在那里得到一些更好的答案。

    【讨论】:

      【解决方案2】:

      您实际上无法保护在客户端运行的任何代码!

      因此,您无法保护变量的内容。就像 Guffa 说的那样,你只能让破解变得更加困难。

      【讨论】:

      • 没错,你可以做的就是在你的脚本中通过混淆、压缩或添加指针来改变难度,这样就更难解码了,一定要删除cmets,这就是我轻松破解js的方法脚本
      【解决方案3】:

      您可以将分数变量作为局部变量放在类构造函数中,这样更难获得:

      function MyClass() {
        var score = 0;
      
        this.somethingHappened = function() {
          if (someondition) {
            score++;
          }
        }
      
        this.getScore = function() {
          return score;
        }
      
      }
      

      当然仍然可以破解代码,但它根本不像更改全局变量那么简单。

      【讨论】:

      • @SeCorp 你甚至可以替换整个对象!我认为你应该更好地保护(=“使更困难”)添加播放高分的代码。
      • @SeCorp:是的,你不能制作一个无法破解的脚本,你只能让你更难弄清楚如何去做。
      【解决方案4】:

      您无法采取任何措施来避免这种情况。您可以通过混淆代码来增加难度,但仍然可以破解分数。

      一种更难的方法是双重保存分数,并在循环或某些函数中检查它是否在游戏逻辑之外发生了变化,这样用户需要找到这两个变量。

      如果第二个分值是另一个分值的两倍,则通过将当前分值与所有变量分值进行比较,更难找到。

      【讨论】:

        【解决方案5】:

        http://www.crockford.com/javascript/private.html

        请参阅 Crockford 关于 js 中的私有和公共 var 的文章

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2016-08-22
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-03-16
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多