objective-c - 这些数据是否被安全地发送?

标签 objective-c ios security

我只是想看看这样通过HTTPBody发送登录信息是否安全?还是应该对用户名和密码进行编码?

NSString *myRequestString = [[NSString alloc] initWithFormat:@"username=%@&password=%@", _userName.text, _passWord.text];
    NSData *myRequestData = [NSData dataWithBytes:[myRequestString UTF8String] length:[myRequestString length]];
    NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:[NSURL URLWithString: @"http://website.com/ilogin.php"]]; 
    [request setHTTPMethod: @"POST"];
    [request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"content-type"];
    [request setHTTPBody: myRequestData];
    [NSURLConnection connectionWithRequest:request delegate:self];
    NSHTTPURLResponse *response;
    NSError *err;
    NSData *returnData = [ NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&err];
    NSString *reply = [[NSString alloc] initWithData:returnData encoding:NSASCIIStringEncoding];
    NSLog(@"responseData: %@", reply);
    if (reply == @"Login Successful") {
        _loginResponse = [NSString stringWithString:@"Successfully Logged In"];
    } else if (reply == @"Incorrect Password") {
        _loginResponse = [NSString stringWithString:@"Incorrect Username or Password"];
    } else if (reply == @"LOGIN_ERROR_USERNAME") {
        _loginResponse = [NSString stringWithString:@"Incorrect Username or Password"];
    } else {
        _loginResponse = [NSString stringWithString:reply];
    }

最佳答案

这不安全。真正安全的唯一方法是使用 HTTPS,但这需要您支付证书费用,因为 iOS 不会连接到未经验证的 HTTPS 服务。

您可以通过对用户名和密码使用单向散列来提高安全性。基本上附加用户名、密码和所谓的“salt”值,它应该是您生成一次的随机序列,然后硬编码到您的应用程序中。

获得该字符串后,将 MD5 或 SHA1 等散列应用于该字符串,以获得您发送的无意义序列作为身份验证。

然后在服务器端循环遍历用户并对每个用户名和密码应用相同的算法,使用相同的盐值,然后查看结果是否与发送的内容匹配,这会告诉您用户是谁,但是不让任何监听的人知道他是谁。

为了更加安全,请在用户首次注册时应用该哈希值,并将哈希值而不是密码存储在您的数据库中,这样,如果您的网站遭到破坏,您就不必告诉所有用户他们需要更改密码(就像最近一些知名网站不得不更改密码一样)。

无论如何,将哈希存储在数据库中以供查找也更有效,因此您不必遍历所有记录并在每次有人登录时将哈希应用于每个记录。

关于objective-c - 这些数据是否被安全地发送?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8885176/

相关文章:

iphone - UITableView 核心数据重新排序

objective-c - 嵌套的 NSUserDefaults 数组读/写

iphone - 获取 UIView 的容器/UIViewController

iphone - Xcode:委托(delegate)对象是否必须向委托(delegate)对象发送消息?

html - 风格被认为是有害的?

iphone - 从 UIButton 向 ViewController 发送通知

ios - 如何在使用移动视觉人脸检测器时点击 UIView 进行捕获

html - 在移动浏览器上隐藏 iOS 日期选择器

ios - 如何在 Apple 设备上获取唯一且一致的设备 ID

android - 使用 Android 硬件支持的 KeyStore