2009-02-07 12 views
25

Tengo una aplicación simple, basada en la plantilla de "Aplicación de utilidad". Recupera un archivo XML protegido con contraseña (a través de NSXMLParser).Almacenamiento de contraseñas en aplicaciones de iPhone

Quiero permitir que el usuario establezca un nombre de usuario y una contraseña en "FlipsideView", ¿cómo podría hacerlo?

tengo los conceptos básicos en su lugar, las dos cajas UITextField, el valor del cual se vuelve a establecer en un valor fijo cuando la vista cargas (usando el método de viewWillAppear), y NSLog'd cuando la vista está cerrado (el NSLog es solo para probar, obviamente, en el método viewWillDisappear)

¿Cómo guardo los datos? He echado un vistazo a la documentación del desarrollador, y parece que debería estar usando NSUserDefaults ..?

Respuesta

33

Estoy de acuerdo con Ben. Esto es exactamente para lo que es el llavero.

No almacenaría bajo ninguna circunstancia las contraseñas en los valores predeterminados como sugiere dbr. Esto es altamente inseguro. En esencia, estás almacenando tus contraseñas al aire libre.

Además de código de ejemplo de Apple, también recomiendo código llavero de Buzz Anderson: iPhone Keychain Code

+0

Perfecto, gracias! Una cosa señalada en los comentarios de esa página (que causó el error al compilar), debe incluir el iPhoneOS Security.framework para que funcione. – dbr

+0

Esto tiene mucho sentido para almacenar la contraseña, pero ¿qué ocurre con el almacenamiento del nombre de usuario (para recuperar la contraseña)? Algo que no se sobrescribirá en las actualizaciones de la aplicación, etc. Parece inútil almacenar en los valores de usuario si es lo único que hay allí. –

4

Aha, NSUserDefaults parece funcionar, y es fácil de usar, , pero no es seguro en lo más mínimo:

password es el IBOutlet para la 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"]; 
} 

La contraseña se almacena en texto plano en un plist, por lo que sería muy fácil para alguien más para el acceso .. pero esto es útil para almacenar los ajustes no sensibles.

Terminé usando esto para almacenar el campo de nombre de usuario , y guardé la contraseña usando el SFHFKeychainUtils keychain code de la respuesta de agosto.

+3

Esto es muy inseguro. En esencia, estás almacenando contraseñas al aire libre. – August

+0

Sí, me olvidé por completo del Llavero ... He actualizado la respuesta para reiterar cuán inseguro es – dbr

9

Esto es exactamente lo que Apple desarrolló el llavero para. Usando Keychain, puede almacenar su contraseña en forma encriptada. Eche un vistazo a la muestra de GenericKeychain de Apple.

Cuestiones relacionadas