用于将数据发送到服务器的相对较好的javascript安全机制

时间:2014-02-18 19:55:40

标签: javascript php security

我正在开发一款具有全球高分排名的基于javascript的游戏。

让我们假设如果我将使用js代码,那么没有人会有足够的意愿以这样的方式解密它,这将允许他对游戏机制进行任何改变。所以,让我们说我不必为游戏作弊而烦恼。

我的问题是,如何使用ajax相对安全地将高分数发送到我的服务器?如果我将高分放入post变量,那么这个请求很容易被伪造。任何想法如何保护它?

我知道这里没有任何解决方案可以被证实是非常安全和牢不可破的,但考虑到如果有人打破它就没有额外的风险我只需要一些会耗费时间的东西可以。

1 个答案:

答案 0 :(得分:2)

在您这样的场景中,任何形式的加密/散列/混淆都不会对您有所帮助。 为什么?您的代码在用户计算机上的浏览器中运行。这意味着用户可以控制的东西(即使他不知道它)可以访问原始数据,并且可以重现“合法”通信(并且您可以运行混淆代码而无需对其进行反混淆)。

确保玩家无法作弊的唯一方法是,如果您在服务器端处理得分计算,为此,您必须将用户输入发送到服务器并以“OK,法律行动”或“CHEATER CHEATER”作出回应! !!”每次。所以基本上游戏在服务器上运行,浏览器只作为一个非常瘦的客户端。这就是目前大多数多人在线游戏的工作方式。

我要做的就是妥协一下。 在浏览器中运行游戏,但记录服务器上的所有播放器操作。它不需要是实时的。 然后编写一个服务器端服务,对此记录的数据进行常识性检查,并批准或拒绝最终得分。 让我们想象一下跳棋游戏。日志条目将是“从A1移动到B2”。这是一个合法的举动。现在你希望其他玩家采取行动。之后你会看到“从B2移动到G7”。这是一个明显的违规行为,你拒绝分数,也许是禁止那个玩家的IP禁令。)

如果是反应游戏,你可以检查动作之间的时间/距离。