2009-02-07 5 views
25

J'ai une application simple, basée sur le modèle "Application Utility". Il récupère un fichier XML protégé par mot de passe (via NSXMLParser).Stockage des mots de passe dans les applications iPhone

Je veux permettre à l'utilisateur de définir un nom d'utilisateur et mot de passe dans le « FlipsideView », comment pourrais-je aller à ce sujet?

Je les bases en place, les deux boîtes UITextField, dont la valeur se prépare à une valeur fixe lorsque la charge d'affichage (en utilisant la méthode viewWillAppear) et NSLog'd lorsque l'affichage est fermé (le NSLog est juste pour le test, évidemment, dans la méthode viewWillDisappear)

Comment puis-je stocker les données? J'ai jeté un oeil à la documentation du développeur, et il semble que je devrais utiliser NSUserDefaults ..?

Répondre

33

Je suis d'accord avec Ben. C'est exactement à quoi sert le Keychain.

je ne voudrais pas, en aucun cas stocker les mots de passe simplement dans les valeurs par défaut comme le suggère DBR. Ceci est très peu sûr. Vous stockez essentiellement vos mots de passe à l'air libre.

En plus de l'exemple de code d'Apple, je recommande également Buzz Anderson code Trousseau: iPhone Keychain Code

+0

Parfait, merci! Une chose a souligné dans les commentaires de cette page (qui a causé l'erreur lors de la compilation), vous devez inclure le Security.Syoutube iPhoneOS pour que cela fonctionne. – dbr

+0

Cela est parfaitement logique pour stocker le mot de passe, mais qu'en est-il de stocker le nom d'utilisateur (pour récupérer le mot de passe)? Quelque chose qui ne sera pas écrasé sur les mises à jour de l'application, etc. Il semble inutile de stocker dans le userdefaults si c'est la seule chose là-bas. –

4

Aha, NSUserDefaults semble fonctionner, et est simple à utiliser, mais est pas sécurisé dans le moindre:

password est le IBOutlet pour le UITextField.

- (void)viewWillAppear:(BOOL)animated 
{ 
    NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults]; 
    NSString *pword = [prefs objectForKey:@"password"]; 
    password.text = uname; 
} 

- (void)viewWillDisappear:(BOOL)animated{ 
    NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults]; 
    [prefs setObject:password.text forKey:@"password"]; 
} 

Le mot de passe est stocké en texte brut dans un plist, il serait assez facile pour quelqu'un d'autre accès .. mais ce qui est utile pour le stockage des paramètres non sensibles.

J'ai fini par l'utiliser pour stocker le nom d'utilisateur champ, et stocké le mot de passe en utilisant le SFHFKeychainUtils keychain code de la réponse d'août.

+3

Ceci est très précaire. Vous stockez essentiellement les mots de passe à l'air libre. – August

+0

Yeh, j'ai complètement oublié le porte-clé .. J'ai mis à jour la réponse pour réitérer à quel point il est insécurisé – dbr

9

C'est exactement ce que Apple a développé le porte-clés pour. En utilisant Keychain, vous pouvez stocker votre mot de passe sous forme cryptée. Jetez un oeil à l'échantillon GenericKeychain d'Apple.