2012-01-16 17 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などのハッシュを文字列に適用して、認証として送信するナンセンスシーケンスを取得します。

サーバー側では、ユーザーをループし、同じsalt値を使用して同じユーザー名とパスワードを同じアルゴリズムで適用し、結果が送信されたものと一致するかどうかを確認します。誰もがそれを知ることはできません。

さらに安全性を高めるには、ユーザーが初めてデータベースにパスワードの代わりにハッシュ値を登録して保存するときにそのハッシュを適用します。そうすれば、Webサイトが侵害された場合、ユーザーはパスワードを変更する必要があります(いくつかのハイプロファイルサイトのように最近しなければなりません)。

それはとにかく、ルックアップのために、データベース内のハッシュを保存するためにも、より効率的なので、あなたはすべてのレコードをループしており、それぞれに誰かがログインするたびに、そのハッシュを適用されません。

+0

ありがとう、私はphpbb3フォーラムボードを使用しています、私はそれがパスワードとすべてを格納する方法は正確にはわかりませんが、私はそれを調べて、あなたが作ったすべての提案をする方法を見ていきますあなたは --Edit-- を助けるために私はすべてのパスワードを保存するときは、必ず証明書のために支払う必要はありません – iGamers

+0

phpBB3のは塩漬けハッシュを使用していることが分かった:あなたは、自己署名証明書を使用していることを確実にすることができますサブジェクト識別子は一致します。 –

+0

iOSが自己署名SSLサーバーへの接続を拒否していることは間違いありませんが、私はそれが私の専門分野ではないことを認めます。 –

関連する問題