LocalStorage è in circostanze normali accessibile solo dall'app. È sicuro come la sandbox sulla piattaforma specifica (iOS, Android) è in grado di proteggere i dati della tua app da leggere da altre app.
A volte la sandbox non è forte come ci si potrebbe aspettare, ad es. in questi casi:
- il dispositivo è radicata o jailbroken
- il costruttore non ha fornito aggiornamenti di sicurezza o l'utente semplicemente non aggiornare
- l'attaccante ha accesso fisico al dispositivo, ad esempio se si tratta di rubato.
Se l'utente malintenzionato ha accesso alla password e al nome utente in chiaro, può provare anche per altri account (non solo per il servizio). Quindi, se l'utente della tua app ha utilizzato la stessa password per più servizi, l'utente malintenzionato potrebbe anche accedervi.
Che ne dici di memorizzare un hash della password?
Per le applicazioni lato server questa è una grande idea, perché vengono eseguite in un ambiente protetto (centri dati con controllo degli accessi, ingegneri di sistema che si occupano degli aggiornamenti di sicurezza).
Un telefono, d'altra parte, viene rubato facilmente e gli utenti spesso non installano o non possono installare aggiornamenti di sicurezza.
Se l'hash non è salato, è molto semplice ottenere la password in chiaro utilizzando le tabelle arcobaleno se si dispone dell'hash. Se l'hash è salato, è molto facile ottenere la password in chiaro per le password semplici. Inoltre, è molto facile generare hash di password non sicuri.
Soluzione: negozio generati casualmente token di accesso: non importa quanto semplice o complesso la password è, è solo impossibile per ottenere la password in chiaro, cercando in token.
TL; DR
Se stai usando le credenziali per l'autenticazione contro qualche tipo di servizio API, si dovrebbe non memorizzare la password e nome utente localmente anche in un negozio di sicuro come l'iOS portachiavi.
Che cosa si dovrebbe fare, invece è memorizzare solo un generata in modo casuale Token (NON è un hash della password!) si ottiene da tale API (simile al concetto di immagazzinare l'ID di sessione in un cookie, piuttosto che l'utente/passare combinazione). Una possibilità sarebbe usare OAuth.
In questo modo si assicura che le credenziali reali non possano mai essere trapelate, anche quando la sandbox non riesce a proteggere i dati o il telefono viene rubato.
ho aggiunto una sezione perché non utilizzare l'hash della password/perché un token dell'API casuale è meglio: https://stackoverflow.com/a/18144689/1518423 – stefreak