2012-01-16 2 views
2

Я просто хочу узнать, безопасно ли отправка информации для входа через 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]; 
    } 
+3

Это как небезопасно, как могло бы быть. Вместо этого вы должны использовать HTTPS (SSL-шифрованное HTTP-сообщение) для начала. Кроме того, отправка пароля в виде открытого текста - это то, что вы, возможно, захотите предотвратить. Вместо этого отправьте хешированную версию пароля и сравните ее на сервере с хешированной версией. Собственно, даже не храните пароли открытого текста на сервере, а только хешированные версии. – Till

ответ

2

Это не безопасно. Единственный способ быть действительно безопасным - использовать HTTPS, но для этого требуется, чтобы вы заплатили за сертификат, поскольку iOS не будет подключаться к непроверенным службам HTTPS.

Вы можете улучшить безопасность, используя односторонний хэш на имени пользователя и пароле. В основном добавьте имя пользователя, пароль и так называемое значение «соли», которое должно быть случайной последовательностью, которую вы генерируете один раз, а затем жестко кодируете в свое приложение.

Как только у вас есть эта строка, примените хэш, такой как MD5 или SHA1, к строке, чтобы получить бессмысленную последовательность, которую вы отправляете в качестве аутентификации.

На стороне сервера вы затем прокручиваете пользователей и применяете один и тот же алгоритм к каждому имени пользователя и паролю с использованием того же значения соли, а затем видите, соответствует ли результат тому, что было отправлено, что говорит вам, кто является пользователем, но не позволяет никому слушать, кто это.

Чтобы быть еще более безопасным, примените этот хэш, когда пользователь сначала зарегистрирует и сохранит хеш-значение вместо своего пароля в вашей базе данных, таким образом, если ваш веб-сайт когда-либо был скомпрометирован, вам не придется рассказывать все ваши пользователи, которым они должны изменить свои пароли (например, несколько сайтов с высоким профилем были в последнее время).

Это также более эффективно хранить хэш в базе данных для целей подстановки в любом случае, так что вам не придется перебрать все записи и применить этот хэш для каждого из них каждый раз, когда кто-то зайдет.

+0

спасибо, я использую форум форума phpbb3, я не совсем уверен, как он хранит пароли и все, но я собираюсь изучить это и посмотреть, как делать все предложения, которые вы сделали, спасибо для вас помогите --Edit-- Я только узнал, что phpBB3 использует соленые хэши при хранении всех паролей – iGamers

+0

Вам необязательно платить за сертификат: вы можете использовать самозаверяющий сертификат и обеспечить, чтобы идентификаторы объекта совпадают. –

+0

Я почти уверен, что iOS отказывается подключиться к самоподписанным серверам SSL, но я признаю, что это не моя область знаний. –

Смежные вопросы