Quanto è sicuro localstorage?


33

La domanda dice davvero tutto. Voglio fornire un servizio ma non voglio archiviare personalmente nessuno dei dati in un database. Con tutte le recenti notizie di hacking, ecc., Mi sembra più bello che i clienti abbiano il controllo completo sui propri dati.

Il problema è che i dati memorizzati sono potenzialmente sensibili. Quello che stavo per fare era ... quando un cliente visita il sito web ci sarebbe una domanda che ti chiede "sei su un personal computer o un computer pubblico". Se si trovano su un computer pubblico, il sito rifiuta l'accesso.

Se fossero su un personal computer, li richiederebbe di impostare una password. Tutti i loro dati verrebbero quindi crittografati con questa password. Ora ovviamente questo non è troppo sicuro. Il metodo di crittografia dovrebbe essere in JavaScript e la sua password in testo normale, quindi presumo che per un utente esperto sia possibile individuare la password nel LocalStorage e accedere ai dati.

Sento però che questo non è un grosso problema. Se si utilizza un personal computer, le possibilità che ciò accada sono remote poiché ... qualcun altro avrebbe bisogno di accedere al proprio account utente specifico sul computer, qualcun altro dovrebbe conoscere il sito ... qualcun altro dovrebbe capire localStorage e come accedervi. I dati sensibili non sono quelli che comprometteranno la loro identità o molto altro. Registra qualcosa che la maggior parte delle persone non vorrebbe pubblicare pubblicamente.

Quindi davvero la domanda è: localStorage è abbastanza sicuro?

Domanda aggiuntiva ... quanto è difficile cancellare il tuo archivio locale? Non vorrei che gli utenti cancellassero accidentalmente i loro dati.

Infine, vale la pena crittografare / decrittografare i loro dati come se si dispone della password è possibile accedere al sito.


2
JavaScript lato client non è il posto migliore per eseguire la crittografia. Qualsiasi utente esperto può guardare il codice e hackerare la tua crittografia algorthim e farlo in modo che in realtà non faccia nulla e accetti semplicemente la password crittografata.

Risposte:


10

Che ne dici di non archiviare affatto la password, nemmeno nella memoria locale? È possibile utilizzare una funzione di derivazione chiave per ottenere una chiave dalla password. Con un sale e un numero ragionevole di iterazioni questo dovrebbe essere decentemente sicuro.


Sarebbe più sicuro se la password fosse inviata a PHP che generasse la chiave dietro le quinte?
JasonS,

No. La password viene inizialmente indicata sul client. Inviandolo al server aumenti il ​​rischio che possa essere rubato. Fare la derivazione chiave in JS mantiene il segreto sul client. In ogni caso dovresti dimenticare la PW poco dopo. Ma penso che sia ancora inutile - vedi la mia risposta.

Molti hacker sono abbastanza intelligenti ... Usa Lib bCrypt.
Eddie B,

2

L'uso di JavaScript con archiviazione locale è al massimo sicuro (il tuo server più la connessione tra browser e server).

Se qualcuno riesce a modificare il tuo server e servire diversi file JS o modificare (mentre viene trasmesso) i file JS inviati dal server al client, possono fare qualsiasi cosa con i dati che desiderano.

Inoltre: poiché i dati sono sul client, non è possibile fare nulla per proteggere i dati. Su un normale server potresti ad esempio limitare la frequenza di accesso (esempio per una password remota sicura: solo 1 password letta entro 10 minuti). Tutto ciò è inutile se i dati si trovano sul client e tutto il codice che funziona con i dati può essere manipolato da un utente malintenzionato.

Dopotutto anche con localstorage devi proteggere la tua applicazione web! Perché fare le cose sul server (si spera) sicuro allora? In caso contrario, perché non utilizzare un programma locale installato sul client?


Non pensi che il principale problema di sicurezza sia se il dispositivo viene utilizzato o rubato da qualcun altro?

2

Che ne dite di ottenere una chiave dal server che viene utilizzata per decrittografare i dati localStorage?

Potrebbe funzionare così:

  • Quando viene stabilita una sessione, il server restituisce una chiave.
  • Tale chiave viene utilizzata per crittografare / decrittografare i dati in localStorage.
  • Quando l'utente lascia la pagina, la chiave viene persa, impedendo ad altri di leggere cosa c'è in localStorage.

Ciò dovrebbe consentire l'accesso solo quando un utente ha una sessione stabilita.


3
Tuttavia, ciò non funzionerebbe per accedere ai dati offline (che sembra un caso d'uso primario per localStorage). Per utilizzare questo metodo offline, è necessario conservare la chiave.
Timothy Lee Russell,

0

generalmente non è difficile cancellare l'archiviazione locale, ma dipende dal browser. Tuttavia, è necessario accedere agli strumenti di sviluppo del browser (firebug, materiale webkit, ecc.).

pensaci come pensi ai biscotti. Non conservare mai i dati sensibili nell'archivio locale. password, numeri di carta di credito, qualunque cosa.

puoi sempre implementare alcune funzionalità per cancellare l'archiviazione locale dopo x quantità di inattività, ma ciò non risolverà un problema di sicurezza. È come se una sessione automatica scadesse. Lo stesso problema si applica, se una persona lascia un computer e poi qualcun altro si siede prima che la sessione scada, possono fare cose.


0

Due problemi:

  1. se memorizzi password di testo semplice e poi fai affidamento sul fatto che non è probabile che si trovino, è solo sicurezza attraverso l'oscurità. Memorizza i dati in chiaro e fai affidamento sullo stesso presupposto (ancora non sicuro, ma nessun falso senso di sicurezza)

  2. sulla maggior parte dei browser, se le persone cancellano la cache rimuovono anche il contenuto del loro archivio locale. Le persone non si aspettano di perdere dati importanti quando cancellano la loro cronologia e cache.

Penso che tu stia esagerando sul significato di localStorage. Se si desidera utilizzare un database locale che gioca bene con webapps si potrebbe dare un'occhiata al CouchDB s' couchapps .

Ma non memorizzare la password.


0

Puoi usare javascrypt . Chiedere all'utente una password che diventerebbe la chiave di crittografia / decrittografia

Non è necessario memorizzare la password, ma richiederla ogni volta che l'utente apre la pagina.
Può essere memorizzarlo, se l'utente lo desidera, e ora le implicazioni.

Ma poi per unire il commento di Stivlo, che dire di:

  1. accesso a più dispositivi
  2. di riserva
  3. Ha dimenticato la password
  4. svuotamento della cache troppo facile

Penso che dovresti riconsiderare l'inizio del ragionamento. Evitare il cloud solo a causa di eventi recenti e sensazionali, è una rapida conclusione.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.