保护javascript游戏时机

时间:2012-10-12 14:39:28

标签: php javascript security

我正在创建一个基于画布的游戏,它有一个重要的计时元素。完成游戏后,用户的完成时间将发送到服务器上的PHP / MySQL,以便与其他玩家进行比较。

服务器端定时(即提交请求时间的开始请求时间)似乎可能会导致加载时间影响用户的实际时间,因此在这种情况下效率低下。

我遇到的问题是确定一种确保发送时间合法的方法。如何阻止某人使用他们的控制台并以提交虚假时间的方式编辑客户端代码?

非常感谢任何帮助。

4 个答案:

答案 0 :(得分:8)

你做不到。 永远不要相信客户。对服务器的每个请求都可能被欺骗。

答案 1 :(得分:1)

你做不到。简单地

时钟可能运行缓慢,可能会改变开始和结束之间的日期/时间。

我参与了一个项目,我们放慢时间来观察一些行为。

所以 NOT 信任客户端。靠你的时钟。那是你可以控制的那个。

(想想这个 - 你在街上问一个陌生人的时间,他们的手表可能有点快或慢。我的速度有点快,所以即使我迟到,我也会更准时准时! )

答案 2 :(得分:0)

在游戏开始时,ping服务器并让服务器将其服务器时间保存到会话或其他持久性方法。完成后将完成的时间发送到服务器。在服务器上比较开始时间请求和结束时间请求之间的时间差以及从游戏提交的时间。允许一些时间上的差异,但像bergi说这是很多工作,但仍然不会是100%。

流程图:

Game start -> send command to server. 
Server saves time: (2:53pm)

Game end -> send players time to server (3mins).
Server gets current time (2:56pm)

Server compares start time (2:53pm) with current time (2:56pm) which is 3mins.
IF the difference == 3mins +/- 30sec then assume time is valid.

根据您需要的严格程度以及您接受的容差来调整细节。 - 记住客户可能甚至没有玩游戏......任何请求都可能被欺骗。希望这是一个很好的起点。

答案 3 :(得分:0)

  

服务器端计时(即提交请求时间的开始请求时间)似乎可能会导致加载时间影响用户的实际时间,因此在这种情况下效率低下。

它可以。欢迎来到激动人心的在线游戏世界。这是您的服务器端应用程序需要更高级的地方,您可以在其中修改人员时间以使其更加公平。应该执行Ping / traceroutes以了解延迟。

  

我遇到的问题是确定一种确保发送时间合法的方法。如何阻止某人使用他们的控制台并以提交虚假时间的方式编辑客户端代码?

不确定HTML5在这方面是否有任何进步 - 我不指望它会 - 但是,一种方法是使用Flash,或使用浏览器以外的应用程序,这可能会破坏你使用JavaScript的目的首先。