如何安全地将变量从 Swift 应用程序传递到 PHP 脚本,或使此代码更安全
How to securely pass variables to PHP script from Swift application, or make this code more secure
我正在使用 NSURL 调用与 MySQL 数据库交互的 PHP 脚本。我通过 URL 传递变量,它可以被拦截和黑客攻击。有什么方法可以使用 Swift 传递表单数据,或者使用我现在拥有的类似结构将变量安全地传递给 URL 吗?我完成了应用程序才意识到这个漏洞。如果没有办法改变这段代码,我想我将不得不重写一堆......
这是我的结构代码:
let username = "bob"
let myUrl = NSURL(string: "http://127.0.0.1/phpscript.php?username=\(username)")
let request = NSMutableURLRequest(URL: myUrl!)
request.HTTPMethod = "POST"
let task = NSURLSession.sharedSession().dataTaskWithRequest(request) {
data, response, error in
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0)) {
let responseString = NSString(data: data!, encoding: NSUTF8StringEncoding)
if error != nil {
print("Error: \(error)")
}
dispatch_async(dispatch_get_main_queue()) {
self.testLabel.text = "\(responseString!)"
}
}
}
task.resume()
如您所见,只需查看 URL 即可轻松收集用户名。您是否知道除了通过 URL 之外还可以传递变量而无需重写所有这些代码的方法?
非常感谢
您可以通过 post 传递用户名,方法是在 ..."POST"
和 let task...
之间添加以下代码:
let postString = "username=\(username)"
request.HTTPBody = postString.dataUsingEncoding(NSUTF8StringEncoding)
最终结果:
let username = "bob"
let myUrl = NSURL(string: "http://127.0.0.1/phpscript.php")
let request = NSMutableURLRequest(URL: myUrl!)
request.HTTPMethod = "POST"
let postString = "username=\(username)"
request.HTTPBody = postString.dataUsingEncoding(NSUTF8StringEncoding)
let task = NSURLSession.sharedSession().dataTaskWithRequest(request) {
data, response, error in
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0)) {
let responseString = NSString(data: data!, encoding: NSUTF8StringEncoding)
if error != nil {
print("Error: \(error)")
}
dispatch_async(dispatch_get_main_queue()) {
self.testLabel.text = "\(responseString!)"
}
}
}
task.resume()
我正在使用 NSURL 调用与 MySQL 数据库交互的 PHP 脚本。我通过 URL 传递变量,它可以被拦截和黑客攻击。有什么方法可以使用 Swift 传递表单数据,或者使用我现在拥有的类似结构将变量安全地传递给 URL 吗?我完成了应用程序才意识到这个漏洞。如果没有办法改变这段代码,我想我将不得不重写一堆......
这是我的结构代码:
let username = "bob"
let myUrl = NSURL(string: "http://127.0.0.1/phpscript.php?username=\(username)")
let request = NSMutableURLRequest(URL: myUrl!)
request.HTTPMethod = "POST"
let task = NSURLSession.sharedSession().dataTaskWithRequest(request) {
data, response, error in
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0)) {
let responseString = NSString(data: data!, encoding: NSUTF8StringEncoding)
if error != nil {
print("Error: \(error)")
}
dispatch_async(dispatch_get_main_queue()) {
self.testLabel.text = "\(responseString!)"
}
}
}
task.resume()
如您所见,只需查看 URL 即可轻松收集用户名。您是否知道除了通过 URL 之外还可以传递变量而无需重写所有这些代码的方法?
非常感谢
您可以通过 post 传递用户名,方法是在 ..."POST"
和 let task...
之间添加以下代码:
let postString = "username=\(username)"
request.HTTPBody = postString.dataUsingEncoding(NSUTF8StringEncoding)
最终结果:
let username = "bob"
let myUrl = NSURL(string: "http://127.0.0.1/phpscript.php")
let request = NSMutableURLRequest(URL: myUrl!)
request.HTTPMethod = "POST"
let postString = "username=\(username)"
request.HTTPBody = postString.dataUsingEncoding(NSUTF8StringEncoding)
let task = NSURLSession.sharedSession().dataTaskWithRequest(request) {
data, response, error in
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0)) {
let responseString = NSString(data: data!, encoding: NSUTF8StringEncoding)
if error != nil {
print("Error: \(error)")
}
dispatch_async(dispatch_get_main_queue()) {
self.testLabel.text = "\(responseString!)"
}
}
}
task.resume()