用户/浏览器操作Javascript有多容易?

时间:2012-04-05 21:05:55

标签: javascript variables

我想知道用户/浏览器手动操作或执行Javascript代码是多么容易。

我问的原因是我打算制作一款基于浏览器的游戏。我使用的是Javascript而不是Java,因为我希望尽可能多地使用它。

以下是我的意思的一般示例:用户可能会转到游戏页面。几个变量将存储在JS中,例如,玩家的健康和力量值。玩家可能会选择攻击一个怪物,结果是根据几个存储的变量和一对在战斗中生成的变量确定的。

玩家是否能够操纵存储的变量或调用我的一个JS函数(例如导致进行AJAX调用的函数)?

如果是这样,我怎么能防范呢?我可以验证服务器的每个操作,但这是带宽密集的。

4 个答案:

答案 0 :(得分:3)

点击 F12 ,打开控制台,劈开。

全球范围内的任何内容都很容易被修改。

然而,通过将游戏逻辑封闭在一个闭包中,它变得更难以访问。

所以:

(function() {
    // all your game code here
})();

这将阻止访问本地变量。请确保使用var正确声明它们。

此外,请确保对代码进行模糊处理以使其更难修改,并在接受高分提交等通信时特别小心。我喜欢使用现场制作方法(例如从基数10转换为基数42)对我进行加密。

尽可能将玩家的动作发送到服务器并确保它们有效。如果可以的话,在服务器端保持游戏状态 - 部分是为了检查玩家是否按照规则进行游戏,而且作为副作用,如果用户重新加载页面,您可以恢复游戏。

总而言之,你不能阻止作弊者,但你可以让他们真的很难。

答案 1 :(得分:0)

你有没有打开开发者控制台?您可以访问页面中运行的所有脚本。任何加载都可以被操纵。

通过在特定的闭包中运行代码,可以更加困难。这个S.O.关于闭包的答案可能有助于澄清事情:How do JavaScript closures work?

但是因为它是所有客户端的,所以如果有人真的想要进入并改变事物以使自己受益,那么没有什么是不可能的,因为JavaScript允许运行时内省。

答案 2 :(得分:0)

以这种方式防止作弊的唯一方法是验证服务器的所有操作。即使玩家无法使用适当的工具(他们可以)访问所有javascript,他们也可以在网络级别攻击系统。

唯一的选择是,如果javascript以某种方式获得了可信平台模块API。

答案 3 :(得分:0)

您可能无法避免操纵真实值,但是通过验证,可能会使它变得更复杂。

这就是我的意思。 假设您正在保护健康价值,并且将其称为“健康”。 您声明了另一个健康值,假设我们将其命名为“ hcheck”,但您并未使其等于健康值。您给它一个偏移值-52或+786或其他任何值...您也可以存储异或值或...具有创造力。稍后,您只需检查运行状况值是否与hcheck值相对应,否则就可以将实际值解码回运行状况。

当然,您可以根据需要添加更多盐分,第三个值将是运行状况值与hchek值之间的某种计算方式。

让我们说清楚。这不能保证它会受到100%的保护,但是会使新手感到复杂,即使有第三种保护值,有经验的人也不会浪费时间,因为他们看到它已经变咸了(您可能永远不会知道有多少个保护值/层):)

哦,如果有人有时间和精力去追随您的领导,并固定每个变量的值,那么他们就应该作弊;)