4

这是我的问题:

我有一个移动应用程序,我想根据用户的位置向用户提供一些信息(想想 FourSquare 之类的东西)。但是如何确保用户位置是真实的呢?

我的意思是,假设客户端通过 http 向服务器发出请求:

http://www.myserver.com/getdata?lat=X&long=Y

恶意用户可以轻松修改这些值。
那么如何确保值是准确的呢?

4

4 回答 4

1

你不能。正如您已经想到的那样,客户端始终可以操纵发送到服务器的请求。

您在服务器端唯一能做的就是过滤不太可能的坐标(例如在海上,取决于坐标的含义)。

于 2010-08-17T09:16:36.483 回答
1

您始终可以使用应用程序中的 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 在海的某个地方所说的那样……你可以忽略这个请求。并且仅仅因为您想识别哪个用户发送了请求,您需要在查询字符串上进行一些识别,这可以用作附加变量来创建更好的结果。

于 2010-08-17T09:40:04.627 回答
0

有人可以欺骗/伪造手机将 GPS 坐标设置到其他地方。正如@JochenJung 所说,始终可以更改请求。

于 2010-08-17T09:18:03.073 回答
0

我一直在想同样的事情,但害怕这是不可能的。我的一些想法:

  • 将某种坐标散列添加到请求中,您也可以检查服务器端。这需要客户端了解加密算法(和密钥)并再次使其可破解
  • 检查上一个请求和现在之间的时间是否允许这种位置更改。相当困难,因为您永远无法知道第一个请求是否也不是欺诈,并且您不知道客户端可能使用哪种传输方式
于 2010-08-17T09:23:20.553 回答