2013-08-09 10 views
14

La mia app richiede il login e io ho un'abilità Remember username and password. Il nome utente e la password vengono quindi memorizzati conQuanto è sicuro l'archiviazione dei dati con localStorage?

localStorage.setItem ('nome utente', nome utente);

Quanto è sicuro archiviare nome utente e password? Ciò di cui sono preoccupato, specialmente su Android, è se altre app hanno accesso ai dati e possono recuperare le informazioni di accesso.

L'app è per iOs e Android e sto utilizzando PhoneGap 2.9.

risposta

4

Ogni applicazione utilizza la propria visualizzazione Web in PhoneGap, il localStorage sarà accessibile solo in tale visualizzazione Web.

EDIT: Vorrei ancora pensare a hashing della password.

+1

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

15

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.

+0

eventuali aggiornamenti nel 2016 ? – Lakshay

+3

ancora valido nel 2016. Evita di salvare le credenziali utente in modo semplice o persino in archivi di password sicuri, se possibile. Genera token di autenticazione casuali nel back-end. – stefreak

0

Salvare la password all'interno di localStorage non è un approccio sicuro. Se utilizzi PhoneGap, prova a salvare il nome utente & password all'interno del portachiavi iOS. Date un'occhiata a questo plugin: https://github.com/shazron/KeychainPlugin

+2

so che è tardi per chiedere ma che dire di telefoni Android qualcosa di simile? – Alok

Problemi correlati