服务器和移动应用程序可以使用哪种算法或一组启发式方法,以便服务器始终可以确定应用程序是在给定地理区域(例如国家/地区)的边界内使用的?服务器如何确保定义区域之外的应用程序用户不能错误地声称他们在该区域内?
答案 0 :(得分:1)
您无法100%确定用户未报告虚假地点,您只能尽可能地使其伪造过程。您应该根据您有权访问的数据实施多项检查:
1)用户的IP地址(用户可以使用代理)
2)设备的gps坐标(它们可以被欺骗)
3)设备的区域设置(不是可靠的指标)
最安全的检查之一(但也不是100%)是向用户发送带有确认码的短信,他必须在应用中输入。
我所知道的最复杂的算法之一是Google Play(因此某些应用只能在某些国家/地区使用)。它检查IP地址,用户的移动运营商和其他几个参数,但有一些工具(如Market Enabler
)和可以欺骗系统的技术。
答案 1 :(得分:1)
如果你不想使用谷歌播放或其他方式,最好的方式(我说最好,因为它首先成本没有性能和成本方面,其次它很容易使用,第三,你无论如何你需要它你期望大量的用户 - 它提供了很好的工具和静态缓存,优化器,分析,用户阻止,国家阻止等)是使用cloudflare。
注册免费的cloudflare帐户后,您可以在那里设置服务器公共IP地址,以便所有流量都通过cloudflare代理网络传输。
之后一切都非常简单,您可以在服务器中安装cloudflare module。
在您的应用中,您可以在全局服务器请求变量HTTP_CF_IPCOUNTRY中获取访问者的国家/地区代码 - 例如, PHP中的$ _SERVER ['HTTP_CF_IPCOUNTRY']。它将为您提供澳大利亚的AU。 (iso-3166-1国家代码)。你使用什么语言并不重要。
Coudflare IP数据库经常更新,并且在没有性能开销的情况下检测用户的地理位置似乎非常可靠。
您还可以免受攻击,获得免费缓存和cdn功能以便快速加载等。
我曾用过其他几种方法,但没有一种方法可靠。
如果您的应用程序在没有服务器的情况下运行,您仍然需要将文件pout到服务器并调用远程URL以获取每个请求的用户所在国家/地区。
答案 2 :(得分:0)
除了@bzz提到的东西。你可以读取用户wifi网络的wifi SSID,像http://www.skyhookwireless.com/这样的服务提供api(我认为使用浏览器插件,我不确定),你可以通过提交wifi SSID来获取位置。 如果您在使用应用程序时始终需要用户在特定区域内,您可能最终会同时使用所有选项,如果您只需要一次性检查,基于SMS的方法是最好的IMO。
要访问wifi SSID,请参阅this,仍然无法100%确定。