如何防止javascript和html5游戏中的变量注入

如何防止javascript和html5游戏中的变量注入,javascript,html,code-injection,Javascript,Html,Code Injection,我在我的网站上使用过这个html5蛇游戏,但问题是它很容易被黑客入侵 黑客可以输入分数并提交自己的分数 脚本中是否有保护分数变量不被客户端注入的方法?只要游戏完全在客户端实现,就不需要。“解决方案”是在服务器端实现游戏规则和存储,并让客户端主要是UI,但对于这样一个简单的浏览器游戏来说,这可能有些过分 你可以通过混淆代码使它变得更难,但那只会阻止那些实际上并不在乎的人 如果游戏是确定性的,您可以保留所有游戏“事件”的日志,并将其发送到服务器,在服务器上计算分数。这将使伪造分数变得更容易,但仍然

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

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


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

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

你可以通过混淆代码使它变得更难,但那只会阻止那些实际上并不在乎的人


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

他们也可以通过在浏览器控制台中调用
$.ajax
或类似的方法来提交假分数,而无需注入任何变量。@neuron不管怎样,为了防止这种情况发生,谢谢,所以没有办法让这个游戏免受黑客攻击。我听说了私有变量,它在这里有用吗?嗯,这种方法可以防止有人随意更改javascript控制台中的变量“live”。但这并不能阻止他们向服务器提交任何分数。他们可以通过各种方式来解决这个问题,比如仅仅替换一个编辑过的脚本文件。我会把它和模糊处理放在同一个类别中——它使它变得更难,但只会阻止那些实际上并不在乎的人。这是一个不错的主意,因为它还有助于防止全局命名空间冲突。那么使用console.log()保存所有移动,在保存分数之前的最后检查日志,如果日志等于分数,则为真。任何人也可以注入控制台日志吗?