Javascript中的欺骗时间

时间:2012-12-03 17:56:10

标签: javascript time

我正在开发一个必须衡量用户需要做某事的时间的网络应用。我不能简单地使用javascript时间对象,因为用户可能会改变系统时间来欺骗和欺骗应用程序。我需要一些方法来阻止这种情况。

4 个答案:

答案 0 :(得分:4)

计算服务器方面的时间。

客户端用户无法做到这一点(至少他们不应该这样做)

答案 1 :(得分:4)

我会让网络应用程序将心跳或任何其他形式的信号发送回服务器端。然后,您可以构建一些指标,例如duration = end - start

考虑往返客户端 - 服务器通信,显然不适合ms分辨率测量。

注意:仅仅将“受信任的”Web服务的时间读入您的客户端应用程序并不是一个好主意,您无法保证应用程序不会因此而发脾气。 (客户端交易的基本规则之一是不信任其输入,例如,对于验证,您仍需要在顶部进行服务器端验证)。但是,如果您只是向服务器发送信号,使用服务器的时钟记录其时间戳,则更安全。

答案 2 :(得分:3)

然后你必须在服务器端上执行此操作。客户端上发生的一切都是可操纵的 一种方法是在php或其他服务器端脚本中执行ajax调用并测量时间。

答案 3 :(得分:1)

这很大程度上取决于您需要的测量精度。

如果您长时间测量(一分钟或更长时间)并且只需要精确到一分钟,那么使用ajax调用来获取远程服务器时间显然比任何客户端时钟测量都更加简单。< / p>

如果您尝试在一分钟内测量更短的时间,那么您将需要使用本地时钟来达到任何类型的准确度。为此,您可以使用以下类型算法检查本地计算机的时钟是否已被混乱:

  1. 向服务器发送远程请求以获取当前时间。这可以是公共时间资源,也可以是您自己的服务器。
  2. 在本地计算机上获取当前时间。
  3. 计算这两次之间的偏移量。您正在寻找的是偏移量没有显着变化。
  4. 使用本地计算机时间,标记本地操作的开始
  5. 用户进行操作。
  6. 获取本地计算机上的当前时间以标记本地操作的结束
  7. 再次获得远程时间。
  8. 在本地计算机上获取当前时间
  9. 计算本地和服务器时间之间的偏移量。允许检索远程时间所花费的时间差异很小,看看差异是否与先前计算的差异相对。如果这个差异不一样,那么本地时钟就已经搞乱了。
  10. 请注意,因为您无法立即获得远程时间(检索它时总是存在不确定的延迟时间),因此在验证本地时钟没有被搞乱时,这里存在固有的不准确性。不准确的不是测量本地操作,只是在验证本地时钟没有被弄乱。

    所以......这种技术最适合检测超过几秒的时钟操作,而不是更小的操作。