La raccomandazione OWASP relativa a localstorage è ancora valida?

41

Attualmente sto lavorando su un'applicazione che è un'applicazione a singola pagina creata con Angular. Viene servito su HTTPS, utilizzando HSTS.

Per l'autenticazione, stiamo usando Auth0. La documentazione di Auth0 consiglia di memorizzare il token di accesso in localstorage.

Un intercettore viene quindi utilizzato per aggiungerlo all'intestazione di ogni richiesta HTTP.

Tuttavia, questa risposta consiglia di non memorizzare alcuna informazione sensibile con lo spazio locale.

La risposta è del 2011 e l'autore ha anche co-scritto il cheat di OWASP HTML5, che afferma:

Pay extra attention to “localStorage.getItem” and “setItem” calls implemented in HTML5 page. It helps in detecting when developers build solutions that put sensitive information in local storage, which is a bad practice.

Mi chiedo se la situazione nel 2017/2018 sia cambiata. Sto bene a seguire le linee guida di Auth0, o dovrei prendere un altro approccio?

    
posta JMK 19.12.2017 - 14:51
fonte

4 risposte

47

Personalmente non vedo alcun problema con l'utilizzo della memoria locale finché si è soddisfatti che l'utente non debba effettuare nuovamente l'autenticazione tra le sessioni. La risposta collegata fornisce il seguente argomento contro questo. Direi che è molto debole -

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.

Questo vale per qualsiasi tipo di token di autenticazione. Qualcuno locale con privilegi di amministratore (supponendo che non sia crittografato con una chiave legata alle credenziali dell'utente) può leggerlo da qualsiasi tipo di memoria, RAM o forse anche direttamente dalla rete.

Suggerisce anche -

(or XSS flaw in the website)

Ancora: questo si applica a qualsiasi tipo di token a cui possa accedere JavaScript.

    
risposta data 19.12.2017 - 15:10
fonte
9

Il motivo per cui lo storage locale è considerato non sicuro è perché qualsiasi JavaScript che viene eseguito nel contesto della pagina può accedervi. Questo ti apre al dirottamento di sessione tramite XSS riflessivo e vulnerabilità XSS memorizzate, potenzialmente divulgazione di informazioni a seconda del contenuto del tuo token.

Ad esempio: se un utente accede a una pagina con contenuti condivisi tra altri utenti e vi è una vulnerabilità XSS archiviata, un altro utente può iniettare un attacco che ruberà il token da localstorage.

La breve scadenza protegge solo il tuo token dagli attacchi di replay- ma se esiste una vulnerabilità XSS con accesso a localstorage questo non avrà alcun effetto sulle sessioni attive dato che puoi scrivere un meccanismo di polling per estrarre nuovamente il token da localstorage alla scadenza

Ti suggerisco di utilizzare un cookie come spazio di archiviazione per il tuo token.

  • I cookie possono essere contrassegnati solo come HTTP. Ciò impedirà a JavaScript di poter accedere al cookie
  • Sul server è necessario estrarre il codice dal token dal cookie e quindi convalidarlo
  • Contrassegnalo anche come sicuro solo per HTTPS

Scusa non abbastanza punti per rispondere, quindi rimuovi questo qui:

Un'altra considerazione, qual è il tuo modello di minaccia? Aggressori esterni sul Web: archiviare il token in un processo cookie sul server Utenti sullo stesso computer (Non amministratore): Forse archiviazione di sessione, quindi nessuna persistenza Amministratore locale: Beh niente - sono amministratori locali, possiedono il sistema

La certificazione del cliente non è in realtà un pezzo di autenticazione praticabile per le applicazioni Web come utente: gli autenticatori MFA rappresentano l'alternativa migliore

    
risposta data 20.12.2017 - 20:38
fonte
3

Seguendo i consigli di il blog auth0 tu può contrastare i problemi di sicurezza mantenendo un valore di scadenza dei token bassi e, soprattutto, è possibile crittografare il token.

Un approccio alternativo sarebbe l'uso di Token Web JSON in associazione con OAuth2.

    
risposta data 19.12.2017 - 22:47
fonte
2

Non sono al 100% in sicurezza. Ho letto qualcos'altro da questo.

Il problema con "informazioni sui token sensibili" è lo stesso problema, che si tratti di un cookie o di localStorage.

Ma è possibile salvare molti più dati nello storage locale, cosa che potrebbe far sorgere l'idea, che è una buona idea conservare tutte le informazioni bancarie, tutti i trasferimenti, ecc. (si prega di inserire altre informazioni rischiose. ...) nella memoria locale, quindi puoi accedervi offline.

Il rischio per la sicurezza di un cookie o di una sessione viene mitigato dal timeout della sessione sul lato server. Ma la memoria locale non ha un timeout. Quindi, se immagazzini qualcosa nello storage locale, preparati che rimanga lì per sempre. Se non vuoi che tutti coloro che hanno accesso alla macchina siano in grado di leggerlo, assicurati di eliminarlo e assicurati che il tuo meccanismo funzioni in "ogni circostanza" (qualunque cosa ciò significhi nel contesto di archiviazione locale - questo non è possibile. Ma io sono uno sviluppatore PHP, per favore correggimi.)

    
risposta data 20.12.2017 - 10:36
fonte

Leggi altre domande sui tag