我正在开发一个必须衡量用户需要做某事的时间的网络应用。我不能简单地使用javascript时间对象,因为用户可能会改变系统时间来欺骗和欺骗应用程序。我需要一些方法来阻止这种情况。
答案 0 :(得分:4)
计算服务器方面的时间。
客户端用户无法做到这一点(至少他们不应该这样做)
答案 1 :(得分:4)
我会让网络应用程序将心跳或任何其他形式的信号发送回服务器端。然后,您可以构建一些指标,例如duration = end - start
考虑往返客户端 - 服务器通信,显然不适合ms分辨率测量。
注意:仅仅将“受信任的”Web服务的时间读入您的客户端应用程序并不是一个好主意,您无法保证应用程序不会因此而发脾气。 (客户端交易的基本规则之一是不信任其输入,例如,对于验证,您仍需要在顶部进行服务器端验证)。但是,如果您只是向服务器发送信号,使用服务器的时钟记录其时间戳,则更安全。
答案 2 :(得分:3)
然后你必须在服务器端上执行此操作。客户端上发生的一切都是可操纵的 一种方法是在php或其他服务器端脚本中执行ajax调用并测量时间。
答案 3 :(得分:1)
这很大程度上取决于您需要的测量精度。
如果您长时间测量(一分钟或更长时间)并且只需要精确到一分钟,那么使用ajax调用来获取远程服务器时间显然比任何客户端时钟测量都更加简单。< / p>
如果您尝试在一分钟内测量更短的时间,那么您将需要使用本地时钟来达到任何类型的准确度。为此,您可以使用以下类型算法检查本地计算机的时钟是否已被混乱:
请注意,因为您无法立即获得远程时间(检索它时总是存在不确定的延迟时间),因此在验证本地时钟没有被搞乱时,这里存在固有的不准确性。不准确的不是测量本地操作,只是在验证本地时钟没有被弄乱。
所以......这种技术最适合检测超过几秒的时钟操作,而不是更小的操作。