我开发了一种基于位置的服务,它使用 GPS 识别用户的位置。我想验证来自 GPS 的数据,因为攻击者可以使用模拟器欺骗位置信息。
我从这里研究了一种身份验证机制,但我不知道如何实现他们提到的技术。
我开发了一种基于位置的服务,它使用 GPS 识别用户的位置。我想验证来自 GPS 的数据,因为攻击者可以使用模拟器欺骗位置信息。
我从这里研究了一种身份验证机制,但我不知道如何实现他们提到的技术。
本文的想法是从两个不同的提供商那里检索地理位置。在您的情况下,您将获得设备的 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;
}
遵循这种方法可能会出现两种不同类型的错误:
设置较小的值THRESHOLD
将越来越多地导致错误#1。大多数用户永远不会伪造他们的 GPS 数据,因此声称他们是作弊者不会让您的应用成功 ;-)
该论文指出,基于蜂窝网络的精度约为 100 - 1500 米。所以我强烈建议你选择大于 1500 米的值。
请注意 - 正如 Rune FS 所提到的 - 高级用户可能会同时伪造两个位置提供者。