确保移动用户没有向服务器发送虚假的日期,时间和时区

时间:2018-07-12 14:21:53

标签: date datetime timezone ntp

移动应用程序具有签到功能,供用户发送照片和观察结果,该应用程序会将其位置,日期和时间附加到请求中,然后将其发送到服务器。

这是非常重要的,用户不能伪造此日期和时间,否则用户将可以上班迟到,但可以使用伪造的“ 15分钟前”进行签入。

服务器在美国,用户在许多国家/地区,因此日期和时区不同,因此我认为我不能使用服务器的日期和时间。

该签到在网站上对全世界的用户都是可见的,但是签到时间必须是进行签到的用户的签入时间。

示例

用户于7月5日13:45在墨西哥签到。
网站应该显示此日期和时间,即 7月5日13:45 ,即使日本的某个人可以看到它。

问题

用户在巴西7月6日09:37签到,但是他假装自己的移动日期和时间设置,说7月6日09:00假装他上班没迟到。

服务器如何知道实际上是7月6日09:37而不是09:00,并向世界上任何地方的人显示正确的日期和时间?

请记住,用户还可以伪造自己的时区和GPS,但服务器仍需要获取 real 时区,以显示真实且不会误导的信息。

2 个答案:

答案 0 :(得分:2)

  

这是非常重要的,用户不能伪造此日期和时间,否则用户将可以上班迟到,但可以使用伪造的“ 15分钟前”进行签入。

最好通过在收到请求时从服务器获取UTC时间戳来处理这一部分。

  

服务器在美国,用户在许多国家/地区,因此日期和时区不同,因此我认为我无法使用服务器的日期和时间。

时区与该目的无关。从服务器获取UTC时间,而不是本地时间。服务器的本地时间永远不应在您的应用程序代码中使用。

如果需要将其调整为特定的时区,则可以通过多种方式从用户那里收集时间,或者可以由应用程序的某些管理员向用户永久分配一个。即使时区错误或伪造,也不会影响工作时间-因为您是在UTC中捕获的。

  

示例
  用户于7月5日13:45在墨西哥签到。
  网站应该显示这个日期和时间,即7月5日13:45,即使日本的某个人可以看到它。

很好。除非用户在墨西哥(实际上,墨西哥有多个时区,所以您需要更具体-使用an IANA time zone identifier)。您可以随时将UTC时间戳转换为墨西哥时间-在收到时间戳(保存UTC和墨西哥时间)时,或者在向用户显示时(仅保存UTC并在显示时转换为墨西哥时间) )。用户在日本也与这种情况无关。

  

问题
  用户在7月6日09:37在巴西签到,但他假装自己的移动日期和时间设置,说7月6日09:00假装他上班没迟到。

如果您在服务器上以UTC捕获时间并确保服务器时钟正确同步,那么这不是问题。

  

请记住,用户还可以伪造自己的时区和GPS,但服务器仍需要获取真实时区以显示真实信息,而不会误导信息。

的确。您无法以无法伪造的方式从用户那里获取此信息 。但是,您可以避免在应用程序代码中依赖它。对于纯粹的持续时间计算,只需将所有内容都基于UTC。对于更复杂的事情(例如确定轮班差异或午夜或当地其他高峰时间的每日加班时间等),请让其他用户设置适用的时区,而不是收集时区。例如,假设这些是员工,则员工的经理或人事部门将为员工的人事记录分配时区。

当然,如果员工是出差旅行,而当地时间规则在不同时区中的适用方式有所不同,那么您将有更多的逻辑来考虑如何捕获此类详细信息。 (我的经验告诉我,这种情况很少见。)

答案 1 :(得分:1)

您不能做自己想做的事。您的应用程序依靠移动设备的操作系统来获取日期,时间,时区和gps之类的信息。虽然很难在开箱即用的操作系统上伪造gps数据,但总有可能。您真正想要的是一个“后门”。一个后门,无论用户多么努力地隐藏信息,都可以获取用户设备的“真实”信息。如果可能的话,我们将不需要/不需要黑客和政府网络安全团队。知道后门的任何人都可以找到世界上其他任何人。

您只能使用自己的一些措施来抓捕此类滥用者。您可以检查用户时区是否正在更改。或者自上次使用该应用程序以来,使用其他国家/地区的IP地址。或者,如果您真的要寻求GPS许可,那么您也可以查看该人的位置随时间推移是否不合理(例如,该用户在加拿大,但3个小时后看起来好像在中国)。一旦检测到这种可能的滥用,就可以标记该帐户以供人工审核。