12

Dopo che un utente si è disconnesso, se ha premuto il pulsante Indietro, può tornare all'ultima pagina in cui si trovavano prima di disconnettersi.Come cancellare la cache del browser dopo il logout dell'utente per impedire l'accesso alle informazioni private tramite il pulsante 'Indietro'

L'app su cui sto lavorando verrà spesso utilizzata su un computer pubblico (ad esempio una biblioteca o un laboratorio informatico) e vorrei impedire agli utenti di visualizzare qualsiasi cosa dalle precedenti sessioni utente.

Sono su Rails 3 e Devise, btw, anche se sembra che questo problema possa creare un framework o un meccanismo di login.

La soluzione utilizza le intestazioni/meta-tag per disabilitare la cache del browser? Qualcuno sa di una gemma o di un tutorial che risolve questo problema?

Attendo con ansia il vostro parere.

risposta

2

Sì, è necessario utilizzare le intestazioni http per indicare al browser di non memorizzare nella cache la pagina. Questo page() da OWASP contiene le informazioni su come eseguire questa operazione.

Come per l'articolo di cui sopra è possibile impostare la seguente intestazione di istruire il browser a non memorizzare nella cache della pagina:

HTTP/1.1: 
Cache-Control: no-cache 

o

HTTP/1.0: 
Pragma: no-cache 
Expires: <past date or illegal value (e.g., 0)> 

Spero che questo aiuti.

+0

Grazie per le informazioni. Questo si occuperà del problema di sicurezza, ma con il caching disattivato, le prestazioni ne risentiranno, no? Gli utenti dovranno scaricare tutte le risorse statiche su ogni caricamento della pagina. Questo sembra un problema difficile da risolvere. Qualche idea intelligente su come bilanciare la sicurezza con le prestazioni in questo caso? – bowsersenior

3

Essendo su Rails, è possibile impostare facilmente tutti gli elementi collocati nella cartella public con una cache aggressiva e selezionare con precisione cos'altro può essere memorizzato nella cache, come la pagina pubblica "circa".

È necessario impostare Cache-Control: no-cache per impedire al browser di memorizzare nella cache pagine HTML, XML, JSON contenenti informazioni sensibili (in pratica qualsiasi cosa accessibile solo con un accesso corretto) e impostare una cache più aggressiva per asset statici come css e immagini.

  • I buoni candidati per la cache aggressiva sono il css e le immagini utilizzate all'interno dell'applicazione e nelle pagine pubbliche.
  • I buoni candidati per un no-cache sono qualsiasi cosa accessibile dopo un login (cioè se si stanno memorizzando immagini che dovrebbero essere accessibili solo al proprietario, non dovrebbe essere memorizzato nella cache, se si ha una richiesta Ajax per gli utenti autenticati, che XML non dovrebbe essere memorizzato nella cache).
5

Utilizzare il codice seguente nel controller dell'applicazione .. funziona per me. Spero che questo ti possa aiutare. Grazie !!

codice

before_filter :set_cache_buster 

def set_cache_buster 
    response.headers["Cache-Control"] = "no-cache, no-store, max-age=0, must-revalidate" 
    response.headers["Pragma"] = "no-cache" 
    response.headers["Expires"] = "Fri, 01 Jan 1990 00:00:00 GMT" 
end 
Problemi correlati