【发布时间】:2015-06-19 19:25:27
【问题描述】:
我们有一个 Android 应用程序将一些数据发送到网络服务,然后网络服务将其保存在 MySQL 数据库中。如果不是来自应用程序本身,我们希望避免人们使用 Web 服务。我的意思是,我们要确保没有人可以对我们的应用执行 MITM 攻击,然后从其他地方向我们的 Web 服务发送请求。
我们想出了下一个想法:
我们在 Android 应用和网络服务上都包含一个密码,然后对于网络服务的每个请求,都会以这种方式生成一个使用此类密码和当前时间戳的令牌:
// Pseudo
String token = md5(private_passphrase + (timestamp / 60));
然后将生成的令牌发送到 Web 服务,该服务以相同的方式生成另一个令牌并进行比较。如果两者相同,则允许请求。
这个想法是,即使有人嗅探了从我们的应用程序发送的数据包,他们以后也无法使用来自其他来源的相同请求。
这个解决方案有多好和安全?我们更关心的是不让其他人从应用程序外部使用我们的服务,而不是保护我们发送的数据。
【问题讨论】:
-
如果两个设备上的时钟不同步,或者有任何网络延迟会怎样?
-
@MarkBaker 服务器在给定的时间偏移中检查多个可能的令牌(现在是 5 分钟)。如果由于任何原因仍然失败,服务器会发回它的当前时间戳,以便客户端可以使用服务器的时间戳再次构建请求。
标签: php android web-services security