C'è un modo per mantenere una pagina dal rendering di una volta che una persona ha effettuato il login, ma ha colpito il pulsante “indietro”?

StackOverflow https://stackoverflow.com/questions/64059

Domanda

Ho un sito web che richiede un accesso e mostra informazioni sensibili.

La persona va alla pagina, è richiesto per l'accesso, quindi può vedere le informazioni.

La persona registri di fuori del sito, ed è indirizzato alla pagina di login.

La persona quindi possibile premere "indietro" e tornare subito alla pagina dove le informazioni sensibili contenute.Poiché il browser pensa di esso come di HTML, spettacoli per loro non è un problema.

C'è un modo per evitare che le informazioni vengano visualizzate quando la persona che colpisce il pulsante "indietro" da registrato schermo?Non sto cercando di disattivare il pulsante indietro per sé, sto solo cercando di mantenere le informazioni riservate di nuovo perché la persona non è registrato in più il sito.

Per amor di discussione, al di sopra del sito/scenario è in ASP.NET con Forme di Autenticazione (in modo che quando l'utente va alla prima pagina, che è la pagina che si viene reindirizzati alla pagina di accesso - in caso che fa la differenza).

È stato utile?

Soluzione

La risposta breve è che non può essere fatto in modo sicuro.

Tuttavia, ci sono un sacco di trucchi che possono essere implementate per rendere più difficile per gli utenti di colpire indietro e ottenere dati sensibili visualizzato.

Response.Cache.SetCacheability(HttpCacheability.NoCache);
Response.Cache.SetExpires(Now.AddSeconds(-1));
Response.Cache.SetNoStore();
Response.AppendHeader("Pragma", "no-cache");

Questo consente di disattivare la memorizzazione nella cache sul lato client, ma questo è non supportato da tutti i browser.

Se hai la possibilità di utilizzo di AJAX quindi i dati sensibili possono essere recuperati utilizzando un updatepanel che viene aggiornato dal codice del cliente e, pertanto, non verrà visualizzato quando colpire a meno che il cliente è ancora connesso.

Altri suggerimenti

Cache e la cronologia sono indipendenti e non si influenzano a vicenda.

L'unica eccezione fatto per le banche è che la combinazione di HTTPS e Cache-Control: must-revalidate le forze di aggiornamento quando si naviga nella storia.

In pianura HTTP non c'è modo di fare questo, tranne sfruttando bug del browser.

Si potrebbe hack intorno ad esso utilizzando Javascript che controlla document.cookie e reindirizza quando un "killer" cookie è impostato, ma immagino che questo potrebbe andare storto quando il browser non consente di impostare/cancellare i cookie esattamente come previsto.

Da aspdev.org:

Aggiungere la seguente riga nella parte superiore del Page_Load e il ASP.NET pagina non verrà memorizzato nella cache del browser degli utenti:

Response.Cache.SetCacheability(HttpCacheability.NoCache)

Le impostazioni di questa proprietà garantisce che se l'utente preme il tasto "back", il contenuto sarà andato, e se si preme "aggiorna" sarà reindirizzato al login-page.

DannySmurf, <meta> gli elementi sono estremamente inaffidabili quando si tratta di controllo della cache, e Pragma, in particolare, ancora di più. Riferimento.

dannyp e gli altri, no-cache non si ferma cache di memorizzazione di risorse sensibili.Esso significa semplicemente che una cache può servire una risorsa che ha memorizzato senza rinnovando prima.Se si desidera impedire che le risorse sensibili nella cache, è necessario utilizzare il no-store direttiva.

Si potrebbe avere una funzione javascript che fa un rapido controllo del server (ajax) e se l'utente non è loggato, cancella la pagina corrente e la sostituisce con un messaggio.Questo, ovviamente, essere vulnerabili a un utente whos javascript è disattivato, ma che è abbastanza raro.Sul lato positivo, questo è sia il browser e il server della tecnologia (asp/php, ecc) agnostico.

Siete alla ricerca di un " no-cache:

<META HTTP-EQUIV="PRAGMA" CONTENT="NO-CACHE">

Se hai una pagina master design, questo può essere un po ' po ' di un giocoliere, ma credo che si può mettere la presente direttiva su una sola pagina, senza intaccare il resto del tuo sito (supponendo che sia quello che vuoi).

Se hai questa direttiva, il browser verrà doverosamente indietro la testa per il server alla ricerca di un marchio nuova copia della pagina, che farà sì che il vostro server per verificare che l'utente non è autenticato e bump lui alla pagina di login.

Hanno il logout essere un POST.Quindi il browser chiederà "sei sicuro di voler re-inviare il modulo?" piuttosto che visualizza la pagina.

Non so come farlo in ASP.NET ma in PHP vorrei fare qualcosa di simile:

header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
header("Cache-Control: no-cache");
header("Pragma: no-cache");

Che forza il browser a ricontrollare che la voce, in modo di autenticazione, il controllo deve essere attivata, negando l'accesso dell'utente.

E 'un po' di sforzo, ma se si ha un applet java o un applicazione flash incorporato e l'autenticazione stato fatto per mezzo di che si potrebbe fare in modo che essi avevano per autenticare in, ehm, 'in tempo reale con il server ogni volta che si desidera visualizzare le informazioni.

Utilizza questo si può anche crittografare le informazioni.

C'è sempre la possibilità che qualcuno può solo salvare la pagina con le informazioni sensibili su, non avendo cache non ha intenzione di ottenere intorno a questa situazione (ma poi uno screenshot può essere preso sempre di un flash o java application).

Per completezza:

Response.Cache.SetCacheability(HttpCacheability.NoCache);
Response.Cache.SetNoStore();
Response.Cache.SetExpires(DateTime.Now.AddMinutes(-1));

La risposta corretta comporta l'uso di impostazione HTTP header Cache-Control sulla risposta.Se si desidera assicurarsi che essi mai la cache di output, è possibile fare Cache-Control:"no-cache".Questo è spesso usato in coordinamento con no-store.

Altre opzioni, se si desidera limitato di memorizzazione nella cache, includono l'impostazione di una scadenza di tempo e must-revalidate, ma questi potrebbe potenzialmente causare una pagina memorizzata nella cache per essere nuovamente visualizzato.

Vedere http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.9.4

Beh, in un grande brasiliano, la società di banca (Banco do Brasil) che è noto per avere uno dei mondi più sicura ed efficiente, home banking software, semplicemente mettere in storia.vai(1) in ogni pagina.Quindi, se si preme il pulsante indietro, che vi sarà restituito.Semplice.

Si prega di guardare le intestazioni di risposta HTTP.La maggior parte del codice ASP che le persone sono la pubblicazione sembra essere l'impostazione quelli.Essere sicuri.

Il chipmunk libro da O'Reilly la bibbia di HTTP, e Chris Shiflett HTTP del libro è buona, come pure.

Si può avere la pagina web con il sensibile essere restituito come un HTTP POST, quindi nella maggior parte dei casi browser vi darà il messaggio che chiede se si desidera inviare di nuovo i dati.(Purtroppo non riesco a trovare un canonico di origine di questo comportamento.)

Ho appena avuto il banking esempio in mente.

La pagina della mia banca è questo:

<meta http-equiv="expires" content="0" />

Questo dovrebbe essere questo, suppongo.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top