这是我的问题:
我有一个移动应用程序,我想根据用户的位置向用户提供一些信息(想想 FourSquare 之类的东西)。但是如何确保用户位置是真实的呢?
我的意思是,假设客户端通过 http 向服务器发出请求:
恶意用户可以轻松修改这些值。
那么如何确保值是准确的呢?
这是我的问题:
我有一个移动应用程序,我想根据用户的位置向用户提供一些信息(想想 FourSquare 之类的东西)。但是如何确保用户位置是真实的呢?
我的意思是,假设客户端通过 http 向服务器发出请求:
恶意用户可以轻松修改这些值。
那么如何确保值是准确的呢?
你不能。正如您已经想到的那样,客户端始终可以操纵发送到服务器的请求。
您在服务器端唯一能做的就是过滤不太可能的坐标(例如在海上,取决于坐标的含义)。
您始终可以使用应用程序中的 pgp 加密,然后向服务器发送一个数据包,该服务器将对消息进行解码,您就会知道它是发送请求的程序。
因此,如果用户想要伪造坐标,他将需要破解手机上的软件才能真正做到这一点。
希望能给你一些想法...
另一方面,您可以在第一次联系服务器时发出哈希(身份验证或类似的东西),并在您的移动应用程序上进行一些简单的数学运算:x your_hash 和 y your_hash 或类似的东西(应该更复杂,因为它很容易猜测)然后在服务器上: http ://www.myserver.com/getdata?lat=x&lon=y 然后:在应用程序的服务器端:lat = lat/your_hash lon = lon/your_hash 现在如果 lat/ lon 不在网格中,所以正如 JochenJung 在海的某个地方所说的那样……你可以忽略这个请求。并且仅仅因为您想识别哪个用户发送了请求,您需要在查询字符串上进行一些识别,这可以用作附加变量来创建更好的结果。
有人可以欺骗/伪造手机将 GPS 坐标设置到其他地方。正如@JochenJung 所说,始终可以更改请求。
我一直在想同样的事情,但害怕这是不可能的。我的一些想法: