2012-10-12 14 views
7

Ho bisogno di accedere a una API che richiede l'autenticazione http su base per utente utilizzando un jQuery Mobile API.archiviare in modo sicuro la password dell'utente localmente in un'app jquery mobile

Ho intenzione di rendere l'app disponibile come sito Web e di impacchetterla in Cordova per vari dispositivi.

Se si dispone di un modulo di accesso che cattura nome utente e password e lo memorizza come variabile javascript, esiste un modo in cui questi dati potrebbero essere esposti?

In tal caso, qual è l'alternativa migliore per gestire la memorizzazione dei dettagli di autenticazione degli utenti? Sono reticente a costruire un server intermedio se non dovessi farlo.

Molte grazie. : D

+0

Utilizza l'autenticazione di base HTTP oppure è un nome utente/password passati come parametri in ciascuna chiamata API? – SilverlightFox

+0

in realtà, entrambi. http basic auth su ogni chiamata al server - nessun token di autenticazione restituito. – significance

+0

Una volta che l'utente si è autenticato con l'autenticazione di base, questi dati non verranno automaticamente inviati dal browser a ciascuna risorsa richiesta?So che questo è il modo in cui funziona per altre richieste del browser, anche se non sono troppo sicuro di JavaScript. – SilverlightFox

risposta

3

Suggerirei di non memorizzare il nome utente o la password nel localStorage, ma invece di memorizzare un token di accesso. I token di accesso possono essere aggiornati e modificati di frequente, inoltre non rivela chi sia l'utente o quale sia la sua password con hash.

Oltre iOS portachiavi o se si sta codifica per un dispositivo non iPhone per una maggiore sicurezza è possibile:

  • Modificare il token di accesso ad ogni login e ogni volta l'applicazione viene utilizzata
  • Conservare l'ID del dispositivo nel database del server (vedi http://docs.phonegap.com/en/2.2.0/cordova_device_device.md.html#device.uuid)
  • Cancellare il localStorage e richiedere un nuovo account di accesso se il token di accesso o il dispositivo ID non corrisponde ai dati memorizzati nel database

Assicurarsi di non archiviare l'ID del dispositivo in localStorage.

Per maggiore sicurezza è anche possibile memorizzare l'indirizzo IP dell'utente nel database e controllare (lato server) se l'indirizzo IP corrisponde, ma questo potrebbe essere troppo poiché l'utente dovrebbe effettuare il login ogni volta che si connettono a Internet in una nuova posizione o se il loro indirizzo IP cambia.

Memorizzare l'indirizzo IP nel database del server, quindi verificare se corrisponde (lato server) sarebbe probabilmente il più sicuro in quanto non sarebbe importante se qualcuno fosse in possesso dei dati localStorage.

2

Quindi ho capito che non controlli il back-end in cui accedi? Se lo fai, sarei più propenso a inviare username/password una volta, e poi a memorizzare alcuni token di accesso che ti consentiranno un accesso successivo.

Se non si controlla il back-end, si è bloccati con la memorizzazione di nome utente/password. Direi che impostarli in localStorage è sicuro come si ottiene (il che è, ammettiamolo, non molto sicuro.) Quindi, ancora una volta, se il tuo login non avviene su HTTPS, sarei più preoccupato per le password che perdono lì che dal dispositivo si). Potresti rendere le password più difficili da trovare, non chiamare le variabili "username/password", crittografarle in javascript, offuscare il tuo codice. Ma alla fine, possono sempre essere recuperati senza troppi sforzi con il giusto accesso al dispositivo.

Dopo il confezionamento come app nativa, sono disponibili più opzioni, ad es. Portachiavi iOS: http://shazronatadobe.wordpress.com/2010/11/06/ios-keychain-plugin-for-phonegap/

Problemi correlati