2012-01-16 74 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 2012-01-16 19:35:05

回答

2

這不安全。唯一真正安全的方法是使用HTTPS,但這需要您支付證書,因爲iOS不會連接到未經驗證的HTTPS服務。

您可以通過對用戶名和密碼使用單向散列來提高安全性。基本上追加用戶名,密碼和所謂的「鹽」值,這應該是一個隨機序列,您只需生成一次,然後硬編碼到您的應用程序中。

一旦擁有了該字符串,就可以將一個散列(如MD5或SHA1)應用於該字符串,以獲得作爲認證發送的無意義序列。

在服務器端,您循環遍歷用戶並使用相同的salt值對每個用戶名和密碼應用相同的算法,然後查看結果是否與發送的內容匹配,這會告訴您用戶是誰,但不會讓任何人傾聽,知道它是誰。

爲了更安全,在用戶首次在數據庫中註冊並存儲散列值而不是密碼時應用該散列,這樣,如果您的網站受到威脅,則不必告知所有用戶需要更改他們的密碼(比如最近幾個高調的網站)。

它也更有效地存儲在數據庫中查找目的哈希無論如何,這樣你就不會在所有的記錄都循環和散列適用於每個人每次有人在登錄。

+0

謝謝你,我使用的是phpbb3論壇板,我不完全確定它是如何存儲密碼和所有內容的,但是我會研究這個問題並研究如何執行所有建議,謝謝爲您提供幫助 - 編輯 - 我剛剛發現phpBB3在存儲所有密碼時使用了鹽漬哈希值 – iGamers 2012-01-16 19:42:54

+0

您不一定需要爲證書付費:您可以使用自簽名證書並確保主題標識符匹配。 – 2012-01-17 22:37:05

+0

我很確定iOS拒絕連接到自簽名的SSL服務器,但我承認這不是我的專業領域。 – 2012-01-18 00:50:41