Czy istnieje sposób, aby nie renderować strony po wylogowaniu się osoby, ale naciśnięciu przycisku "Wstecz"?

Mam jakąś stronę internetową, która wymaga logowania i pokazuje poufne informacje.

Osoba przechodzi na stronę, jest proszony o zalogowanie się, a następnie dostaje zobaczyć informacje.

Osoba wylogowuje się z witryny i jest przekierowywana z powrotem do strony logowania.

Osoba może następnie nacisnąć "Wstecz" i wrócić do strony, na której zawarte są poufne informacje. Ponieważ przeglądarka myśli o tym jako o renderowanym HTML, nie pokazuje im tego problemu.

Is there a way aby zapobiec wyświetlaniu tych informacji, gdy osoba naciśnie przycisk "Wstecz" z ekranu wylogowania? Nie próbuję wyłączyć samego przycisku Wstecz, po prostu staram się, aby poufne informacje nie były wyświetlane ponownie, ponieważ osoba nie jest już zalogowana na stronie.

Dla dobra argumentacji powyższa strona / scenariusz jest w ASP.NET z uwierzytelnianiem formularzy (więc gdy użytkownik przechodzi do pierwszej strony, która jest stroną, którą chce, jest przekierowywany do strona logowania - w przypadku, gdy robi to różnicę).

Author: Ryan Shripat, 2008-09-15

16 answers

Krótka odpowiedź jest taka, że nie można tego zrobić bezpiecznie.

Istnieje jednak wiele sztuczek, które można zaimplementować, aby utrudnić użytkownikom odbijanie i wyświetlanie poufnych danych.

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

Spowoduje to wyłączenie buforowania po stronie klienta, jednak jest to nie obsługiwane przez wszystkie przeglądarki .

Jeśli masz możliwość korzystania z AJAX, wrażliwe dane można pobrać za pomocą panelu updatepanel, który jest aktualizowany z kodu klienta i dlatego nie będzie wyświetlane podczas cofania, chyba że klient jest nadal zalogowany.

 13
Author: Claus Thomsen,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-11-01 21:46:27

Pamięć podręczna i historia są niezależne i nie powinny wpływać na siebie nawzajem.

Jedynym wyjątkiemdla banków jest to, że kombinacja HTTPS i Cache-Control: must-revalidate wymusza odświeżanie podczas nawigacji w historii.

W prostym HTTP nie ma sposobu, aby to zrobić, z wyjątkiem wykorzystania błędów przeglądarki.

Można włamać wokół niego za pomocą Javascript, który sprawdza document.cookie i przekierowuje, gdy" killer " cookie jest ustawiony, ale wyobrażam sobie, że to może pójść poważnie źle, gdy przeglądarka nie Ustaw / Wyczyść pliki cookie dokładnie zgodnie z oczekiwaniami.

 9
Author: Kornel,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-10-19 22:57:25

Z aspdev.org :

Dodaj następujący wiersz na górze obsługi zdarzenia Page_Load i ASP.NET strona nie będzie buforowana w przeglądarkach użytkowników:

Response.Cache.SetCacheability(HttpCacheability.NoCache)

Ustawienia ta właściwość zapewnia, że jeśli użytkownik naciśnie przycisk Wstecz, zawartość zniknie, a jeśli naciśnie "odśwież" zostanie przekierowany na stronę logowania.

 3
Author: Espo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-15 18:03:31

DannySmurf, elementy są bardzo zawodne, jeśli chodzi o kontrolowanie buforowania, a Pragma w szczególności jeszcze bardziej. odniesienie .

 1
Author: Jim,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-15 16:10:46

Dannyp i inne, no-cache nie zatrzymuje pamięci podręcznej od przechowywania wrażliwych zasobów. Oznacza to jedynie, że pamięć podręczna nie może obsługiwać zasobu, który przechowuje, bez uprzedniej jego aktualizacji. Jeśli chcesz zapobiec buforowaniu poufnych zasobów, musisz użyć dyrektywy no-store.

 1
Author: Jim,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-15 16:14:19

Możesz mieć funkcję javascript wykonuje szybkie sprawdzanie serwera (ajax) i jeśli użytkownik nie jest zalogowany, usuwa bieżącą stronę i zastępuje ją Komunikatem. Byłoby to oczywiście podatne na użytkownika, który javascript jest wyłączony, ale jest to dość rzadkie. Z drugiej strony jest to zarówno technologia przeglądarkowa, jak i serwerowa (asp/php itp.).

 1
Author: Jason Coyne,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-04-20 15:53:22

Szukasz dyrektywy no-cache:

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

Jeśli masz projekt strony wzorcowej, może to być trochę żonglerka, ale wierzę, że możesz umieścić tę dyrektywę na jednej stronie, bez wpływu na resztę witryny (zakładając, że tego chcesz).

Jeśli masz ustawioną tę dyrektywę, przeglądarka będzie posłusznie wracać do serwera w poszukiwaniu nowej kopii strony, co spowoduje, że serwer zobaczy, że użytkownik nie jest uwierzytelniony i uderzy on do strony logowania.

 0
Author: TheSmurf,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-15 15:44:29

Niech operacja wylogowania będzie POST. Następnie przeglądarka zapyta: "czy na pewno chcesz ponownie opublikować formularz?"zamiast pokazywać stronę.

 0
Author: Jason Cohen,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-15 15:44:57

Nie wiem jak to zrobić w ASP.NET ale w PHP zrobiłbym coś takiego:

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

, która zmusza przeglądarkę do ponownego sprawdzenia tego elementu, więc sprawdzenie uwierzytelniania powinno zostać uruchomione, odmawiając Użytkownikowi dostępu.

 0
Author: UnkwnTech,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-15 15:45:26

To trochę trudne, ale jeśli masz aplet Javy lub aplikację flash, która została osadzona i uwierzytelnianie zostało wykonane przez to można zrobić to tak, że musieli uwierzytelniać się w, ERM, "w czasie rzeczywistym" z serwerem za każdym razem, gdy chcieli zobaczyć informacje.

Używając tego można również zaszyfrować wszelkie informacje.

Zawsze istnieje możliwość, że ktoś może po prostu zapisać stronę z poufnymi informacjami, bez pamięci podręcznej nie obejdzie tego sytuacji (ale wtedy zawsze można zrobić zrzut ekranu z aplikacji flash lub java).

 0
Author: Henry B,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-15 15:55:56

Dla kompletności:

Response.Cache.SetCacheability(HttpCacheability.NoCache);
Response.Cache.SetNoStore();
Response.Cache.SetExpires(DateTime.Now.AddMinutes(-1));
 0
Author: martin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-15 15:59:16

Poprawna odpowiedź polega na ustawieniu nagłówka HTTP Cache-Control na odpowiedzi. Jeśli chcesz mieć pewność, że Nigdy nie buforuje danych wyjściowych, możesz wykonać Cache-Control: no-cache. Jest to często używane w koordynacji z no-store, jak również.

Inne opcje, jeśli chcesz mieć ograniczone buforowanie, obejmują ustawienie czasu wygaśnięcia i konieczność przedłużenia ważności, ale potencjalnie wszystkie mogą spowodować ponowne wyświetlenie buforowanej strony.

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

 0
Author: Daniel Papasian,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-15 16:31:21

Cóż, w dużej brazylijskiej korporacji bankowej (Banco Do Brasil), która znana jest z posiadania jednego z najbezpieczniejszych i najskuteczniejszych na świecie oprogramowania do bankowości domowej, po prostu zapisują historię.go (1) w każdym page.So, jeśli naciśniesz przycisk Wstecz, zostaniesz zwrócony. Proste.

 0
Author: Ivan Bosnic,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-15 18:13:40

Proszę zajrzeć do nagłówków odpowiedzi HTTP. Większość kodu ASP, który ludzie publikują, wygląda na to, że je ustawia. Upewnij się.

Wiewiórka O ' Reilly to Biblia HTTP, a książka http Chrisa Shifletta jest również dobra.

 0
Author: Andy Lester,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-20 06:00:40

Możesz mieć stronę internetową z wrażliwym być zwrócone jako post HTTP, wtedy w większości przypadków przeglądarki daje wiadomość z pytaniem, czy chcesz ponownie przesłać dane. (Niestety nie mogę znaleźć kanonicznego źródła dla tego zachowania.)

 0
Author: Ed Griebel,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-01-06 16:17:25

Miałem na myśli przykład z bankowości.

Strona mojego banku ma to w sobie:

<meta http-equiv="expires" content="0" />
Chyba o to chodzi.
 0
Author: User,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-04-20 09:48:58