假设我正在为一个展览制作一个网络应用程序(例如平均堆栈),我想确保我的服务器只接受真正在场地的用户的请求,我该怎么办?有哪些常见的攻击?
答案 0 :(得分:1)
简短而通用的答案是你无法真正做到这一点,但请继续阅读。
您需要回答的问题是您希望保护自己的应用是什么,您试图减轻的威胁是什么。
您可以在移动应用中构建任何保护(例如,在另一个答案中的那个),但请记住,客户端完全由用户控制。例如,用户可能伪造应用程序的位置坐标(请参阅Pokemon Go),在模拟器或实际设备中很容易做到。甚至更简单,用户可以从任意来源而不是您的应用程序发出请求。服务器请求必须包含用户的位置 - 但用户可以发送他想要的任何内容。简而言之,客户端上的任何内容都完全由用户控制。
因此,这会导致服务器端保护成为实际安全解决方案(一种难以规避的解决方案)的唯一方法。如果客户端告诉服务器,您的服务器知道客户端在哪里的唯一来源 - 但我们在上面看到这是不可靠的。
然而,有一件事是客户无法合理伪造(至少不容易),那就是客户端IP地址。因此,您可以做的唯一一件事就是阻止用户不在场地使用您的服务,将其锁定在网络级别,例如您的API服务器应该只能从IP范围内访问。场地提供(可能是本地地址范围,或者如果您的API在云中,则是公共IP地址或场地范围)。
答案 1 :(得分:0)
将您的场地位置保存在您的应用或服务器端。然后尝试通过获取大约100毫秒的位置或您选择的半径来跟踪用户。
将CoreLocation.framework添加到BuildPhases - >链接二进制文件与库(从XCode 7.2.1开始不再需要)
将CoreLocation导入您的类 - 可能是ViewController.swift
将CLLocationManagerDelegate添加到您的类声明
将NSLocationWhenInUseUsageDescription和NSLocationAlwaysUsageDescription添加到plist 初始位置管理员:
locationManager = CLLocationManager()
locationManager.delegate = self;
locationManager.desiredAccuracy = kCLLocationAccuracyBest
locationManager.requestAlwaysAuthorization()
locationManager.startUpdatingLocation()
get User Location By:
func locationManager(manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
var locValue:CLLocationCoordinate2D = manager.location.coordinate
print("locations = \(locValue.latitude) \(locValue.longitude)")
}