这些数据是否安全发送?

时间:2012-01-16 19:22:09

标签: 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];
    }

1 个答案:

答案 0 :(得分:2)

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

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

获得该字符串后,将一个哈希值(例如MD5或SHA1)应用于该字符串,以获取您作为身份验证发送的无意义序列。

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

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

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