【问题标题】:Avoid unintentional editing of variables? [closed]避免无意编辑变量? [关闭]
【发布时间】:2016-05-29 23:45:46
【问题描述】:

我正在制作一款游戏,因此有一些变量我希望人们看不到或乱七八糟。

现在我可以进入开发者控制台并输入

myVariable = 9999

它已经改变了。

我正在尝试做大部分服务器端,只是在客户端显示数据,但我仍然需要一些关键变量。

那么有什么好的方法可以处理其他人干预我的代码?

【问题讨论】:

  • 即使您将其设为局部变量,他们也可以使用调试器并设置断点。客户可以为所欲为,而且永远无法完全信任。
  • 如果你想防止人们“破坏”他们自己的游戏:那是不可能的;它是在他们的计算机上运行的代码,他们可以随心所欲地使用它。如果您将高分发送回服务器并想防止人们作弊:错误的方法;服务器只是收到一个 HTTP 请求(或其他什么),并且绝对无法知道它来自哪里;在这种情况下防止作弊比防止摆弄变量要复杂得多。

标签: javascript


【解决方案1】:

简短回答:

你不能这样做!

长答案:

您可以执行不同的操作来防止变量可编辑。例如在strict mode 中,您可以使用const 关键字来创建不可变变量。

您还可以使用Object.defineProperty 定义不可变属性:

var obj = {};
Object.defineProperty(obj, 'immutable', {writable: false, value: 12});
obj.immutable; //12
obj.immutable = 13;
obj.immutable; //12

但是你可以永远做的是阻止用户改变他的浏览器的这种行为。在大多数情况下,这甚至不难。一个简单的浏览器插件就可以重新定义Object.defineProperty。这是客户端代码的一个限制,您永远无法阻止用户对其进行编辑。

最后他总是可以下载你的 JS 代码,编辑它并再次运行它。

这就是为什么必须在服务器上检查所有像验证这样的批判性事情!客户端上的额外验证可能有用,但绝不安全!

【讨论】:

    【解决方案2】:

    如果这是在一个对象中,您可以使用Object.freeze 函数使其不可变。

    【讨论】:

      猜你喜欢
      • 2014-03-21
      • 1970-01-01
      • 2013-03-12
      • 2011-12-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-14
      • 2011-02-11
      相关资源
      最近更新 更多