iOS sdk是否可以检测/阻止位置欺骗?

7
我有一个应用程序,用户需要访问特定位置。当用户靠近该位置时,会打开一个表单填写页面。我怀疑一些用户正在欺骗我的应用程序,他们伪造了他们的当前位置(使用任何其他应用程序)并在家里填写表单。这意味着愚弄我的应用程序。
我在Apple商店搜索,没有可用于iOS设备中为其他应用程序伪造位置坐标的GPS欺骗应用程序。
我在谷歌上搜索到,越狱设备可以进行欺骗,并且Cydia商店有一些应用程序,例如“akLocationX”、“Fake Location”等。下面是相关文章。

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

有人能帮助我吗?我该如何在越狱设备上停止位置欺骗?


可能是 http://stackoverflow.com/questions/16083354/identify-jailbroken-device-from-ios-application 的重复问题。 - Krease
你确定一些用户在欺骗应用程序提供的位置吗?你确定他们没有直接利用你的应用程序Web API吗? - Tim
6个回答

5
基于另一个StackOverflow问题(从iOS应用程序识别越狱设备),您可以检测是否使用某些已知的越狱工具运行您的应用程序,并采取替代代码路径,例如禁用您的应用程序的某个部分(但不要退出或崩溃您的应用程序,因为这可能导致您的应用程序无法通过AppStore测试)。
至于始终获取真实位置,您实际上不能 - 您的应用程序只能在其拥有的环境中运行 - 如果环境是越狱的iPhone,并且在该环境中运行的黑客导致地理位置API报告其位置位于Tattooine或Atlantis,则您的应用程序将获得该位置。下一个最好的选择是尝试检测越狱设备(如上所述)并更改您的应用程序的行为。

1
我不想限制用户在越狱设备上运行应用程序。我们能否检测到伪造位置的应用程序?我们能否禁用这些应用程序的位置欺骗功能,或者我们是否有任何设置字段可以知道应用程序是否执行了位置欺骗? - Saurabh Shukla
1
从您的应用程序的角度来看,只有提供的SDK的结果。无论该调用的结果是“真实”还是“虚假”,都无法从您的应用程序的角度来判断。 - Krease

5
从iOS 15开始,苹果提供了一个公共API来解决这个挑战。 CLLocation在名为sourceInformation的属性中公开其来源,类型为CLLocationSourceInformation
CLLocationSourceInformation具有一个名为isSimulatedBySoftware的属性。

太棒了的小API!感谢您的分享。 - StackRunner

3
其他帖子是正确的,检查设备是否越狱是一种很好的方法。
但是,即使设备没有越狱,仍然有可能通过附近的GPS发射器伪造GPS位置。因此,假设(虽然这极不可能),您的用户拥有此功能。
从技术上讲,可以检测GPS位置是否为假。但是,您能否这样做取决于该人是否伪造了其他信息,例如附近的Wifi网络或其外部IP(例如使用VPN)。
参考:GPS干扰设备
A方法 - Wifi
您可以检测附近的无线网络,然后查找它们的位置,并将其与您的GPS报告的位置进行比较。但是有几个问题。
请记住
必须保持对互联网的网络访问权限。
必须使用未经AppStore应用程序批准的私有API来执行此操作,因此您永远无法在其中发布它。
Wifi必须在设备上启用,而您的应用程序无法控制启用或禁用它。
Wifi热点的GPS位置可能不准确,但通常比从设备的Internet IP(例如B方法中)获得的位置更准确。
参考资料:
查找Wifi热点位置
公共Wifi位置数据库
在iOS中检测无线网络
B方法 - 您的设备IP
您可以连接到返回基于IP的位置信息的在线服务。然后,您可以将其与提供给您的GPS位置进行比较。
这将通过应用商店审核流程,但是……
请记住
必须保持对互联网的网络访问权限。
您的设备IP可能通过VPN,该VPN可能报告与设备实际存在的位置不同的位置。
设备的Internet IP的GPS位置信息可能不准确。
您不能依赖设备的当前网络IP,必须从Internet源查询它。这是因为您的设备可能存在防火墙、网关或其他网络障碍物后面。
您的设备IP位置将不会非常准确,在大多数情况下,您可以确认城市/州,但任何更细的细节都不太可能准确。
参考资料:

3

要伪造位置,甚至不需要越狱设备。只需在Xcode中运行具有模拟位置的应用程序即可轻松完成。我认为检测这种欺诈本来就没有意义。


你能在模拟器中安装App store里的任何应用程序吗?我认为不行。 - Καrτhικ
4
我会翻译中文。调试应用程序时,我不谈论模拟器。在设备上调试应用程序时,Xcode 允许模拟位置。这种位置模拟并不是应用程序范围内的,而是设备范围内的。 - Ortwin Gentz
@Ortwin,我们能否检测到伪造当前位置的应用程序?我们能否禁用此应用程序来伪造位置或者我们是否有任何设置字段可以检测到应用程序是否进行了位置欺骗? - Saurabh Shukla
Saurabh,所有问题的答案都是否定的。至少目前没有公共API可以解决这个问题。 - Ortwin Gentz
1
那么您的意思是,如果您正在调试自己的应用程序并设置了位置,然后启动 FourSquare,FourSquare 将看到模拟位置。FourSquare 是否有一种方法可以检测手机是否处于调试模式? - Καrτhικ
卡尔迪克,是的。我认为Foursquare没有办法检测到这个。 - Ortwin Gentz

2

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

不过,现在有一种适当的处理方式:iBeacon (dev doc 在这里).

基本原理如下:

  • 在用户需要到达的位置设置物理信标设备
  • 使用CLBeaconRegion监视与这些信标的接近度(信标使用蓝牙低功耗与iOS设备进行通信)
  • 这可能更难伪造(因为用户至少需要反向工程一个信标),但我认为它们并不具有加密安全性,因此仍然可能被伪造
  • 即使您自己制作了加密信标,用户也可以窃取其中一个信标 :)

0

这是一个棘手的问题。很难完全防止欺骗,因为客户端需要告知服务器他们的位置。

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接