2012-04-25 17 views
7

Nel caso in cui si desideri memorizzare i dati dipendenti dall'utente in localStorage (ad esempio, poiché più utenti possono utilizzare lo stesso browser per il proprio sito), come si gestisce normalmente questo scenario?Come gestire localStorage per più utenti?

Immaginiamo di essere in grado di identificare l'utente con qualcosa come un unico userId sul lato front-end. Probabilmente farei qualcosa di simile al seguente:

// retrieve the data 
data = JSON.parse(window.localStorage.getItem(userId)) || {}; 

// persist the data 
window.localStorage.setItem(userId, JSON.stringify(data)); 

È un modo ingenuo di fare le cose?

EDIT: Dopo aver dato un po 'più pensato come da @ MДΓΓ БДL e altri commenti, supponiamo che i dati sono sensibili. In tal caso l'esempio sopra è davvero ingenuo. Qualche idea su come trattare i dati sensibili in questo caso? O forse è la risposta: non farlo, salvalo sul back-end?

+0

Non è _secure_, se è quello che stai chiedendo. –

+0

Quanto sono confidenziali le informazioni? A meno che JSON non abbia il proprio meccanismo di autenticazione, un utente può essere in grado di falsificare facilmente la propria identità. – vol7ron

+0

@ MДΓΓБДLL: No, hai ragione su questo. Non ho ancora pensato abbastanza bene, ma per ora, supponiamo che non siano dati sensibili. Solo alcune piccole preferenze, per esempio. –

risposta

4

I dati sensibili non dovrebbero mai essere memorizzati sul client. A meno che tu non possa garantire la sicurezza fisica del computer e/o garantire che l'utente che ha effettuato l'accesso su quel computer sarà sempre quello che usa il computer (entrambi di solito NON sono veri), allora non memorizzare informazioni sensibili sul cliente se puoi evitarlo.

È molto, molto, molto più sicuro memorizzare le informazioni sensibili sul server e richiedere le credenziali di accesso appropriate prima di fornire tali informazioni a un browser. È quindi possibile controllare la sicurezza fisica dei dati sul server e impedire a qualsiasi utente di accedere a dati che non sono i loro. Inoltre, puoi proteggerlo durante il volo con SSL.

Se si desidera archiviare qualcosa in locale disponibile solo per un utente e un computer e un browser su quel computer, è possibile richiedere una password e utilizzare tale password per crittografare/decrittografare i dati archiviati nella memoria locale . Fatta eccezione per un'attività temporanea offline, attualmente non sono sicuro del motivo per cui sarebbe un'esperienza utente migliore rispetto alla memorizzazione su un server in cui può essere disponibile per quell'utente, indipendentemente dal modo in cui accedono a Internet. In questi giorni di accesso mobile, accesso al tablet, accesso al laptop, ecc ... sembra che la tendenza sia più quella di archiviare materiale nel cloud in modo che un determinato utente possa accedere ai propri dati tramite qualsiasi accesso a Internet che potrebbe utilizzare piuttosto che richiedendo loro di usare lo stesso identico computer.

+0

Si noti che è possibile memorizzare dati sensibili sul client * se * è crittografato e protetto con un MAC in modo non malleabile. Il tuo framework web potrebbe fornire un modo per farlo; se non ti preoccupa di far girare il tuo se non sei roba bollente con crittografia. – Venge

+0

Beh, ho pensato di crittografare i dati locali con una password utente (A.c.w. AES, o qualcosa del genere) come da commento di @ chester1000 sotto la mia domanda. Voglio costruire su [ZeroBin] (http://sebsauvage.net/paste/) e idee simili, di cui potresti aver sentito parlare. –

+0

@fireeyedboy - Ho aggiunto un commento sulla crittografia locale. – jfriend00

Problemi correlati