Come verificare i dati da localStorage su un server

1

Questo è un cross-post dal mio Programmers.StackExchange post - Penso che questo potrebbe essere un forum migliore per porre questa domanda. Amministratori: cancella uno di essi come ritieni opportuno.

Sulla mia app mobile, sto memorizzando il nome utente di una persona che ha effettuato il login e sto scaricando alcuni dati per il nome utente specificato / memorizzato. Quando l'utente controlla la presenza di aggiornamenti sul suo contenuto di dati sul server, il server visualizza un delta del contenuto, in base al nome utente. L'app aggiorna quindi la sua visualizzazione locale di conseguenza.

Il problema è che, poiché sto usando localStorage, non c'è alcuna garanzia che qualcuno non modifichi il nome utente memorizzato localmente e provi a richiedere i dati destinati a qualcun altro.

Quale sarebbe il modo migliore per aggirare questo possibile buco di sicurezza? Si prega di commentare questo metodo che sto pensando di implementare:

  1. Ogni volta che accedi, una stringa casuale viene generata e archiviata per il controllo futuro in un database, insieme al tuo nome utente e alla data / ora della richiesta.
  2. Ogni volta che arriva una richiesta di download dei dati per un nome utente, deve essere accompagnata dalla stringa del tentativo precedente. Inoltre, ogni nuovo aggiornamento per il client è accompagnato da una nuova stringa casuale, che viene archiviata nel database e quella precedente è considerata scaduta.
  3. Se la stringa casuale non viene fornita correttamente, l'utente viene disconnesso dall'app mobile (in quanto potrebbe potenzialmente essere qualcuno a manomettere l'app).

Il vantaggio che vedo per questo metodo è che ho anche una pista di controllo per le successive verifiche e analisi forensi. Quali sono i difetti e cosa potrei fare meglio?

    
posta Sudipta Chatterjee 09.01.2013 - 11:27
fonte

1 risposta

3

Devi autenticare il dispositivo mobile dell'utente (quindi autenticare implicitamente il suer).

Suggerisco di generare una nuova stringa casuale a 128 bit (utilizzando un PRNG crittograficamente sicuro), memorizzarla sul dispositivo, memorizzarla su un database lato server associato all'utente e utilizzarla per autenticare il dispositivo . Il dispositivo può connettersi tramite SSL e quindi inviare questa stringa a 128 bit per autenticarsi sul server. Se si utilizza HTTP, un modo molto conveniente per farlo è inserire il valore a 128 bit in un cookie sicuro e persistente e utilizzare HTTPS. La stringa a 128 bit può essere memorizzata permanentemente sul dispositivo. In questo modo, l'utente non ha mai bisogno di accedere di nuovo.

In alternativa, puoi autenticare il dispositivo facendo in modo che il dispositivo generi un nuovo certificato cliente, quindi connettersi utilizzando SSL con questo certificato cliente.

    
risposta data 09.01.2013 - 11:59
fonte

Leggi altre domande sui tag