Javascript中的防欺骗时间
我正在开发一个web应用程序,它必须测量用户做某事所需的时间。我不能简单地使用javascript时间对象,因为用户可能会更改系统时间来欺骗和愚弄应用程序。我需要一些方法来防止这种情况。然后您必须在服务器端执行此操作。客户端上发生的一切都是可操作的。Javascript中的防欺骗时间,javascript,time,Javascript,Time,我正在开发一个web应用程序,它必须测量用户做某事所需的时间。我不能简单地使用javascript时间对象,因为用户可能会更改系统时间来欺骗和愚弄应用程序。我需要一些方法来防止这种情况。然后您必须在服务器端执行此操作。客户端上发生的一切都是可操作的。 一种方法是使用php或其他服务器端脚本进行ajax调用并测量时间。在服务器端计算时间 客户端用户不能再这样做了(至少他们不能这样做)我会让web应用程序将心跳或任何其他形式的信号发送回服务器端。然后您可以构造一些度量,如duration=end-s
一种方法是使用php或其他服务器端脚本进行ajax调用并测量时间。在服务器端计算时间
客户端用户不能再这样做了(至少他们不能这样做)我会让web应用程序将心跳或任何其他形式的信号发送回服务器端。然后您可以构造一些度量,如
duration=end-start
考虑到往返的客户机-服务器通信,这显然不适合ms分辨率测量
注意:将时间从一个“受信任”的web服务读入客户端应用程序不是一个好主意,你不能保证应用程序不会对它产生影响。(客户端交易的主要规则之一是不信任其输入,例如,对于验证,您仍然需要在顶部进行服务器端验证)。但是,如果您只是向服务器发送信号,使用服务器的时钟记录其时间戳,您会安全得多。这在很大程度上取决于您需要的时间测量精度 如果您测量的时间很长(一分钟或更长),并且只需要精确到一分钟以内,那么使用ajax调用获取远程服务器时间显然比任何客户端时钟测量更简单 如果您试图在一分钟内测量更短的时间,那么您需要使用本地时钟来达到任何精度。为此,您可以使用以下类型的算法检查本地计算机的时钟是否受到干扰:
所以。。。这项技术最适用于检测超过几秒钟的时钟操作,而不是更小的操作。可能有一个提供准确时间的公开web服务,但如果用户更改其区域设置,它仍然可能被欺骗。严肃的问题是,这不就是在开玩笑吗?如何防止客户端在任意时间发送“全部完成”?@ultranaut yes。。。但您可以检查服务器时间,以确保允许他们发送data@ultranaut:我可以从服务器获取开始和结束时间来防止这种情况。@Neal不确定检查以确保允许他们发送数据是什么意思。如果我是客户机,而任务实际上需要两秒钟,那么如何防止我在一秒钟内发送数据呢。服务器将如何确定时间是否合法?当然,除非客户机返回某种答案或证明他们已经完成了任务。