localStorage per app su https. Quali aspettative ci sono?

10

Gestisco un registro dei voti online. Per mantenere privati i dati degli studenti, trasferisco tutti i dati su https.

Ora, vorrei usare localStorage per evitare calcoli ridondanti e richieste server. Tuttavia, in base alle specifiche HTML5, l'archiviazione locale non è crittografata.

C'è uno standard di settore per gestire le aspettative degli utenti qui? Potrei immaginare di chiedere agli utenti qualcosa come "Vuoi usare la memoria locale? Renderà tutto più veloce, ma se il tuo computer è compromesso, i dati degli studenti potrebbero essere rubati. Se questo è un computer pubblico, scegli" No ".

Quali tendenze ci sono per il lato UX di questo?

    
posta Riley Lark 29.11.2011 - 22:41
fonte

3 risposte

7

L'archiviazione locale è una funzionalità relativamente nuova disponibile per le applicazioni Web, ma una sorta di "standard del settore" o migliore le pratiche sono già apparse. foglio cheat OWASP HTML5 considerando il tuo caso afferma che:

Underlying storage mechanism may vary from one user agent to the next. In other words, any authentication your application requires can be bypassed by a user with local privileges to the machine on which the data is stored. Therefore, it's recommended not to store any sensitive information in local storage.

Indipendentemente dal fatto che la pagina originale sia fornita tramite http: o https :, l'accesso locale alla macchina (o difetto XSS nel sito Web) può estrarre le informazioni memorizzate al suo interno. Quindi, in parole povere, non dovresti inserire alcuna informazione sensibile / privata.

Non sono a conoscenza di alcun messaggio di conferma utente comune riguardante la riservatezza dell'archiviazione locale, ma il tuo lo rende abbastanza chiaro. Ma ancora, mi raccomando di non mettere dati sensibili in localStorage.

Disclaimer: sono il coautore del cheat HTML5.

    
risposta data 30.11.2011 - 01:14
fonte
4

@Krzysztof Kotowicz ha una buona risposta. Sono d'accordo con le sue raccomandazioni.

Un'altra possibilità, per le applicazioni Web che desiderano davvero archiviare informazioni sensibili sull'archiviazione locale, potrebbe essere quella di archiviarle in forma crittografata. L'applicazione lato client può crittografarla e autenticarla (utilizzando un algoritmo di crittografia a chiave simmetrica e un algoritmo di autenticazione dei messaggi), memorizzare la versione crittografata; per leggere i dati, il software lato client può controllare il MAC e decrittografarlo. Se si utilizza questo approccio, è molto importante evitare di memorizzare la chiave simmetrica nella memoria locale sul lato client. Invece, la chiave dovrebbe essere memorizzata in modo persistente sul server; il client può interrogare il server per la chiave e archiviare la chiave solo in memoria, ma non nella memoria persistente.

La crittografia dei dati nell'archiviazione locale presenta tuttavia una serie di limiti e limitazioni che potrebbero renderla poco attraente in molte impostazioni. Ad esempio, impedisce l'uso dell'applicazione in modalità disconnessa. Per questi motivi, il consiglio di @Krzysztof Kotowicz di evitare la memorizzazione di informazioni riservate o sensibili nella memoria locale è probabilmente il miglior consiglio per la maggior parte delle applicazioni web.

    
risposta data 30.11.2011 - 05:50
fonte
1

I secondo il consiglio di D.W.

Potresti prendere in considerazione lo sviluppo di ciò che di solito si chiama "app a prova di host" o "app web a conoscenza zero". Sembra e si comporta come una normale app Web, ma tutti i dati dell'utente vengono crittografati localmente dal browser stesso prima di essere caricati. La chiave per i processi di crittografia è una passphrase che non viene mai inviata o salvata sul server. Pertanto nessuno tranne l'utente può accedere ai dati.

Disclaimer: questo potrebbe essere un consiglio parziale dato che sono il co-fondatore di Clipperz, un gestore di password online che usa questo approccio.

Puoi leggere di più sull'architettura di un'applicazione web a conoscenza zero sul sito web Clipperz. Se decidi di scriverne uno, puoi utilizzare la libreria Javascript di Crypto primitives (licenza AGPL) di Clipperz o utilizzare questo altro libreria crittografica di Stanford.

    
risposta data 02.12.2011 - 16:03
fonte