android - 验证定位结果

标签 android authentication location

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

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

最佳答案

本文的想法是从两个不同的提供商处检索地理位置。在您的情况下,您将获得设备的 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 数据,尽管它是伪造的

THRESHOLD设置较小的值将越来越多地导致错误#1。最重要的是,大多数用户永远不会伪造他们的 GPS 数据,因此声称他们是作弊者并不会让您的应用程序成功;-)

论文指出,基于蜂窝网络的精度约为 100 - 1500 米。因此我强烈建议您选择大于 1500 米的值。

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

关于android - 验证定位结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14600273/

相关文章:

android - 如何在 firebase 数据库中保存对象?

authentication - 如何在验证访问时避免键盘记录器

python - Python 模块是如何工作的

asp.net-mvc - ASP MVC 如何注销但保持在同一页面上

node.js - 使用 JWT token 。有更好的方法吗?

ios - Swift - 工作日按当前位置按 currentCalendar()

android - Google Maps V2 setLocationSource 删除了蓝色的 MyLocation 图标

android - Android 中 ListView 中项目的动画显示

android - 引导模式 : Android browser

android - 首次使用时用于用户设置的上下文菜单?