Gibt es eine Möglichkeit, eine Seite zu verhindern, Rendering, sobald eine Person abgemeldet hat aber auf den „Zurück“ -Button?

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

Frage

Ich habe einige Website, die eine Anmeldung erfordert und zeigt sensible Informationen.

Die Person, auf die Seite geht, aufgefordert wird, melden Sie sich an, dann wird die Information zu sehen.

Die Person abmeldet der Website, und wird zurück auf die Login-Seite umgeleitet.

Die Person kann dann drücken Sie „zurück“ und gehen Sie nach rechts zurück auf die Seite, wo die sensible Informationen enthalten ist. Da nur der Browser es als HTML gerendert denkt, es zeigt es ihnen kein Problem.

Gibt es eine Möglichkeit, diese Informationen zu verhindern, dass angezeigt wird, wenn die Person, die die „zurück“ trifft Taste vom Bildschirm abgemeldet? Ich versuche nicht, die Zurück-Taste selbst zu deaktivieren, ich bin gerade von den vertraulichen Informationen immer wieder versuchen, wieder angezeigt werden, weil die Person nicht mehr in die Website angemeldet ist.

Aus Gründen der Argumentation, die oben Site / Szenario ist in ASP.NET mit Formularauthentifizierung (so, wenn der Benutzer auf die erste Seite geht, das ist die Seite, die sie wollen, sie auf die Anmeldeseite umgeleitet sind - in Fall, der einen Unterschied macht).

War es hilfreich?

Lösung

Die kurze Antwort ist, dass es nicht sicher durchgeführt werden.

Es gibt viele Tricks, aber die umgesetzt werden können, um es für Benutzer schwierig, zurück zu schlagen und sensible Daten angezeigt bekommen.

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

Dies wird Caching auf Client-Seite deaktivieren, dies ist jedoch nicht von allen Browsern unterstützt .

Wenn Sie die Möglichkeit haben, mit AJAX, dann kann sensible Daten abgerufen werden, um eine Update verwenden, die von Client-Code aktualisiert wird, und deshalb wird es nicht angezeigt, wenn schlagen zurück, es sei denn Kunde noch angemeldet ist.

Andere Tipps

Cache und Geschichte sind unabhängig und ein shouldn ‚t gegenseitig beeinflussen.

Die einzige Ausnahme gemacht für Banken ist diese Kombination von HTTPS und Cache-Control: must-revalidate Kräfte aktualisiert werden, wenn in der Geschichte der Navigation.

In Plain-HTTP gibt es keine Möglichkeit, dies zu tun, außer durch Browser-Bugs zu nutzen.

Sie könnten hack um es mit Javascript, die document.cookie prüft und leitet, wenn ein „Killer“ Cookie gesetzt wird, aber ich glaube, dies ernsthaft schief gehen könnte, wenn Browser nicht setzen / löschen Cookies genau wie erwartet.

aspdev.org :

In

die folgende Zeile auf dem Ereignishandler Page Load und ASP.NET-Seite nicht in dem Benutzer-Browser im Cache gespeichert werden:

Response.Cache.SetCacheability(HttpCacheability.NoCache)

Einstellungen diese Eigenschaft stellt sicher, dass, wenn der Benutzer trifft die Back-Taste wird der Inhalt verschwunden sein, und wenn er „refresh“ drückt wird er auf die Login-Seite umgeleitet werden.

DannySmurf, Elemente sind extrem unzuverlässig, wenn es um Steuern Caching kommt, und Pragma insbesondere noch mehr. Referenz .

dannyp und andere, nicht-Cache nicht stoppen Caches von sensiblen Ressourcen zu speichern. Es bedeutet lediglich, dass ein Cache nicht eine Ressource dienen kann es ohne Revalidierung zuerst gespeichert hat. Wenn Sie möchten von sensiblen Ressourcen zu verhindern, im Cache gespeichert werden, müssen Sie die no-store-Richtlinie verwenden.

könnten Sie haben eine JavaScript-Funktion macht eine schnelle Server-Prüfung (Ajax), und wenn der Benutzer nicht angemeldet ist, löscht die aktuelle Seite und ersetzt sie durch eine Nachricht. Dies wäre offensichtlich anfällig für einen Benutzer whos Javascript ausgeschaltet ist, aber das ist ziemlich selten. Auf der anderen Seite ist dies sowohl Browser und Server-Technologie (ASP / PHP usw.) Agnostiker.

Sie suchen ein no-cache Direktive:

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

Wenn Sie ein Master-Design gehen haben, kann dies ein bisschen ein jonglieren, aber ich glaube, dass Sie diese Anweisung auf einer einzigen Seite stellen können, ohne den Rest Ihrer Website zu beeinflussen (dh unter der Annahme ist, was Sie wollen ).

Wenn Sie diesen Direktive Satz haben, wird der Browser dutifully zurück an den Server Kopf für eine neue Kopie der Seite suchen, die Ihr Server verursachen, um zu sehen, dass der Benutzer nicht authentifiziert ist und stößt ihn zum Login Seite.

Haben Sie den Abmeldevorgang ein POST sein. Dann fragt der Browser für „Sind Sie sicher, dass Sie das Formular neu zu schreiben?“ anstatt die Seite zeigen.

Ich weiß nicht, wie es in ASP.NET zu tun, aber in PHP würde ich so etwas wie:

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

, die den Browser zwingt erneut zu überprüfen, dass das Element, so dass Ihre Authentifizierungsüberprüfung ausgelöst werden soll, verweigert dem Benutzer den Zugriff.

Es ist ein bisschen von einem Stamm, aber wenn Sie ein Java-Applet hatte oder eine Flash-Anwendung, die eingebettet wurde und die Authentifizierung wurde durch das getan könnte man es machen, so dass sie authentifizieren in mußte, erm ‚Echtzeit‘ mit der Server jedes Mal, sie wollten die Informationen anzuzeigen.

Mit diesem Sie auch alle Informationen verschlüsseln können.

Es gibt immer die Möglichkeit, dass jemand kann nur die Seite mit den sensiblen Daten speichert auf, wird sich keinen Cache mit nicht um diese Situation zu bekommen (aber dann kann ein Screenshot immer eine Flash oder Java-Anwendung genommen werden).

Für Vollständigkeit:

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

Die richtige Antwort beinhaltet die Verwendung von auf die Antwort des HTTP-Cache-Control-Header zu setzen. Wenn Sie wollen sicherstellen, dass sie niemals , um die Ausgabe-Cache, können Sie Cache-Control: no-cache. Dies wird häufig verwendet, in Abstimmung mit No-Speicher als auch.

Andere Optionen, wenn Sie beschränkt Caching wollen, umfassen Einstellung ein Ablauf der Zeit und Must-revalidate, aber diese könnten möglicherweise alle dazu bringen, eine Cache-Seite wieder angezeigt werden.

Siehe http://www.w3.org/ Protokolle / RFC2616 / RFC2616-sec14.html # sec14.9.4

Nun, in einer großen brasilianischen Bankgesellschaft (Banco do Brasil), die sie durch eine der weltweit sicherste und effiziente Homebanking-Software bekannt ist, sie einfach history.go setzen (1) in jeder page.So, wenn Sie die zurück-Taste treffen, werden Sie zurückgegeben. Einfach.

Bitte schauen Sie in die HTTP-Response-Header. Die meisten der ASP-Code, der Menschen sieht Mitteilung verfassen, werden jene Einstellung. Achten Sie darauf.

Die Chipmunk Buch von O'Reilly die Bibel von HTTP ist, und Chris Shiflett HTTP Buch ist gut.

können Sie haben die Web-Seite mit dem empfindlichen als HTTP-POST, dann in den meisten Fällen Browsern geben Sie bitten die Nachricht zurückgegeben werden, wenn Sie möchten, die Daten erneut zu senden. (Leider kann ich nicht eine kanonische Quelle für dieses Verhalten finden.)

Ich hatte gerade das Bank Beispiel im Auge behalten.

Die Seite meiner Bank hat dies darin:

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

Hier geht es um das sein sollte nehme ich an.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top