【问题标题】:Detect/Stop Spoofing of Location possible in iOS sdk?在 iOS sdk 中检测/停止位置欺骗?
【发布时间】:2014-01-24 20:19:06
【问题描述】:

我有一个用户需要访问特定位置的应用程序。当用户在此位置附近时,将打开一个表单以供填写。我怀疑某些用户正在欺骗他们当前的位置(使用任何其他应用程序)并在家中填写表格。意味着欺骗我的应用程序。

我在 Apple Store 上搜索,没有可用于 GPS 欺骗的应用程序或可以欺骗 iOS 设备中其他应用程序的位置坐标的应用程序。

我用谷歌搜索,发现越狱设备上可能存在欺骗,并且 Cydia 商店中提供了一些应用程序,例如“akLocationX”、“Fake Location”等。下面是相同的文章。

http://www.addictivetips.com/ios/easily-fake-iphone-current-location-aklocationx/

谁能帮助我,我怎样才能阻止越狱设备上的这个位置欺骗?

【问题讨论】:

标签: ios iphone geolocation location core-location


【解决方案1】:

从 iOS 15 开始,Apple 提供了一个公共 API 来应对这一挑战。

CLLocationsourceInformation 类型的 CLLocationSourceInformation 类型的属性中公开其源

而且,CLLocationSourceInformation 有一个名为 isSimulatedBySoftware 的属性

【讨论】:

    【解决方案2】:

    其他海报是正确的,一个很好的检查方法是验证设备是否越狱。

    但是,即使设备没有越狱,仍然可以使用附近的 GPS 发射器来伪造 GPS 位置。因此,让我们假设(尽管可能性很小)您的用户有这个。

    从技术上讲,可以检测 GPS 位置是否是假的。但是,您这样做的能力取决于此人是否伪造了其他信息,例如附近的 Wifi 网络或其外部 IP(例如使用 VPN)。

    参考:GPS Jamming Devices

    方法 A - Wifi

    您可以检测附近的无线网络,然后查找它们的位置并将其与 GPS 报告的位置进行比较。但是有几个问题。

    记住

    • 您必须保持对 Internet 的网络访问。
    • 您必须使用未经批准使用的私有 API 来执行此操作 通过 AppStore 中的应用程序,因此您将永远无法发布它 在那里。
    • 必须在设备上启用 Wifi,并且您的应用没有任何控件来启用或禁用它。
    • Wifi 热点的 GPS 位置可能不准确,但通常比从设备的互联网 IP 获得的位置(例如方法 B)更准确。

    参考资料:

    方法 B - 您的设备 IP

    您可以连接到在线服务,该服务会根据您的 IP 返回您的位置信息。然后,您可以将其与您提供的 GPS 位置进行比较。

    这将通过应用商店审核流程,但是...

    记住

    • 您必须保持对 Internet 的网络访问。
    • 您的设备 IP 可能通过 VPN 报告,该 VPN 报告的位置可能与设备实际存在的位置不同。
    • 设备互联网 IP 的 GPS 位置信息可能不准确。
    • 您不能依赖设备当前的网络 IP,您必须从 Internet 来源查询它。这是因为您的设备可能存在于防火墙、网关或其他网络屏障之后。
    • 您的设备 IP 位置不会很准确,在大多数情况下您可以确认一个城市/州,但任何更精细的细节都不太可能准确。

    参考资料:

    【讨论】:

      【解决方案3】:

      对于一个应用来说听起来很可怕 :)

      无论如何,现在有一种正确的方法来处理这个问题:iBeacon(开发文档here)。

      基本原理是这样的:

      • 在用户需要的位置设置物理信标设备
      • 使用CLBeaconRegion 监控与这些信标的距离(信标使用Bluetooth Low Energy 与iOS 设备通信)
      • 这可能更难以伪造(因为用户至少需要对其中一个信标进行逆向工程),但我认为它们在密码学上并不安全,因此仍然可以伪造
      • 即使您使用自己的加密信标,用户也可以随时窃取您的信标之一 :)

      【讨论】:

        【解决方案4】:

        这是一个棘手的问题。不可能 100% 防止欺骗,因为需要由客户端通知服务器他们的位置。

        有一种方法可以通过在服务器中使用地理位置数据库验证用户的 IP 地址来减少欺骗(不能完全消除)。您可以确保用户确实位于某个城市。

        【讨论】:

          【解决方案5】:

          要欺骗位置,甚至不需要越狱设备。它可以在 Xcode 中通过运行具有模拟位置的应用程序来简单地完成。我认为一开始就检测这种欺骗是没有意义的。

          【讨论】:

          • 您是否可以在模拟器中安装 App Store 中的任何应用程序?我不这么认为。
          • 我不说模拟器。在设备上调试应用程序时,Xcode 允许您模拟位置。此位置模拟不是应用范围的,而是设备范围的。
          • @Ortwin 我们可以检测到正在欺骗当前位置的应用程序吗?我们可以禁用此应用程序欺骗位置吗?或者我们是否在设置中有任何字段可以检测应用程序是否已完成位置欺骗?
          • Saurabh,所有问题的答案都是否定的。至少没有公开的 API。
          • 所以你是说如果你在调试你自己的应用程序并设置一个位置,然后启动 FourSquare,FourSquare 会看到模拟的位置。 FourSquare 有没有办法检测到手机处于调试模式?
          【解决方案6】:

          基于另一个 StackOverflow 问题 (Identify jailbroken device from iOS application),您可以检测您的应用是否正在使用一些已知的越狱工具运行,并采用替代代码路径,例如禁用应用的该部分(但不要退出或崩溃您的应用,因为这可能会导致您的应用无法通过 AppStore 测试)。

          至于总是获取真实位置,你不能真的 - 你的应用程序只能在它拥有的环境中运行 - 如果环境是越狱的 iPhone,并且在该环境中运行的黑客导致地理定位 api 报告它位置在纹身或亚特兰蒂斯,那么这就是您的应用程序将获得的。下一个最佳选择是尝试检测越狱设备(如上)并更改应用的行为。

          【讨论】:

          • 我不想限制用户在越狱设备上运行应用程序。我们可以检测到欺骗位置的应用程序吗?我们可以禁止那些欺骗位置的人吗?或者我们在设置中是否有任何字段可以让我们知道应用程序是否执行了位置欺骗?
          • 从您的应用程序的角度来看,只有提供的 SDK 的结果。从您的应用的角度来看,无法判断该调用的结果是“真实”还是“虚假”。
          猜你喜欢
          • 2017-05-14
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-03-01
          • 2011-10-01
          • 2012-02-20
          • 2013-08-27
          • 2017-01-12
          相关资源
          最近更新 更多