验证位置结果

时间:2013-01-30 09:12:12

标签: android authentication location

我开发了一种基于位置的服务,该服务使用GPS识别用户的位置。我想验证来自GPS的数据,因为攻击者可以使用模拟器欺骗位置信息。

我从here研究了一种身份验证机制,但我不知道如何实现他们提到的技术。

1 个答案:

答案 0 :(得分:2)

本文的想法是从两个不同的提供者检索地理定位。在您的情况下,您将获得设备的GPS位置以获得高精度和单元ID位置以验证此数据。

以下是如何按小区ID获取位置的完整示例:http://www.devx.com/wireless/Article/40524

您需要为这些位置的差异定义阈值。因此,当GPS和蜂窝电话之间的距离大于我们的阈值时,我们认为GPS位置是假的。

一些抽象代码示例:

static final int THRESHOLD = 2000 // maximum discrepancy in meters

Location getLocationFromGPS();
Location getCellularLocation();

boolean isLocationValid(Location gps) {
    Location cell = getCellularLocation();
    return gps.distanceTo(cell) <= THRESHOLD;
}

遵循这种方法可能会出现两种不同类型的错误:

  1. 假设GPS数据是假的,但不是
  2. 在伪造的时候信任GPS数据
  3. THRESHOLD设置较小的值会越来越多地导致错误#1。大多数用户永远不会伪造他们的GPS数据,所以声称他们的骗子不会让你的应用成功; - )

    该文件指出,基于蜂窝网络的准确度约为100-1500米。所以我强烈建议你选择超过1500米的值。

    请注意 - 正如Rune FS所述 - 高级用户可能会同时伪造两个位置提供商。