【问题标题】:How to prevent variable injection in javascript and html5 games如何防止 javascript 和 html5 游戏中的变量注入
【发布时间】:2014-07-30 03:20:49
【问题描述】:

我在我的网站上使用过这个 html5 Snake 游戏,但问题是它很容易被黑客入侵。

http://cssdeck.com/labs/classic-snake-game-with-html5-canvas

黑客可以注入分数并提交自己的分数。

有没有办法保护脚本中的分数变量不被客户端注入?

【问题讨论】:

  • 他们也可以通过在浏览器控制台中调用$.ajax或类似的东西来提交虚假分数,而无需注入任何变量。
  • @neuront 无论如何要防止这种情况发生?

标签: javascript html code-injection


【解决方案1】:

只要游戏完全在客户端实现即可。 “解决方案”是在服务器端实现游戏规则和存储,客户端主要是UI,但是对于这样一个简单的浏览器游戏来说,这可能有点矫枉过正。

您可以通过混淆代码使其变得更难,但这只会阻止那些实际上并不关心的人。

如果游戏是确定性的,您可以记录所有游戏“事件”并将其发送到服务器,在服务器上计算得分。这将使伪造分数的工作量增加,但仍然可以伪造,而且构建这样一个系统也需要大量工作。

【讨论】:

  • 谢谢,所以没有办法避免这个游戏被黑客入侵。我听说过私有变量,在这里有用吗? stackoverflow.com/questions/3194632/…
  • 嗯。那里的方法可以防止有人随意更改 javascript 控制台中“实时”的变量。但是,它不会阻止他们向服务器提交任何分数。他们可以通过各种方式绕过它,比如替换一个编辑过的脚本文件。我会将其归为与混淆相同的类别——它使它变得更难,但只会阻止那些实际上并不关心的人。不过这不是一个坏主意,因为它还有助于防止全局命名空间冲突。
  • 那么如何使用console.log() 来保存所有动作,最后在保存分数之前检查日志,如果日志等于分数,那么它是真的。任何人都可以注入控制台日志吗?
猜你喜欢
  • 2012-10-17
  • 1970-01-01
  • 1970-01-01
  • 2016-08-22
  • 1970-01-01
  • 1970-01-01
  • 2017-05-19
  • 1970-01-01
  • 2011-04-12
相关资源
最近更新 更多