micha: zutritt zu einer geschützten seite über back-button!

hi zusammen, ich hab da ein kleines prob:

auf der homepage, an der ich gerade arbeite, kann man sich vom öffentlichen bereich in einen geschützten bereich einloggen. dabei wird mit php eine sessionID erzeugt, max. lebensdauer 4 h, und in einer db gespeichert.
verlassen kann man diesen bereich nur über 'logout', womit die sessionID dann auch gelöscht wird. soweit funktioniert das prima, wird keine gültige sessionID in der db gefunden, nippelt das script per #die('session expired etc. pepe') ab.

nach erfolgtem logout kommt man wieder in den öffentlichen bereich. nun habe ich das problem, dass man per browser back-button doch wieder in den geschützten bereich zurückkommt.

frage: kann man das durch meta tags verhindern? (ssl-verbindung steht nicht zur verfügung.) ich hab folgende meta tags bez. browser-/ proxy-caching eingesetzt:

<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="Cache-Control" content="no-cache, must-revalidate, no-store">
<meta http-equiv="expires" content="-1">

somit müsste doch das script komplett neu vom server angefordert werden müssen, und ohne die post-daten aus der login form den zugang verweigern.

oder seh' ich das falsch?

thx, micha

  1. Hallo,

    was machst Du denn mit der Session bei "logout"? Anscheindend wird ja die Session nichtwirklich vernichtet/geschlossen.

    Grüße aus Würzburg
    Julian

    1. hi julian,
      die session wird gelöscht, war das erste was ich kontrolliert hab. um das ganze genauer zu erklären:

      die webseite ist ein frameset, 2 frames, oben einer unten einer.

      oben sitzt die topmenu.php die aus db-navigationsdaten ein dhtml-menu generiert, unten werden bloss noch reine html seiten reingeladen.
      das frameset selbst ist ebenfalls ein php file, dort wird der session kram gemacht und die sessionID and das topmenu.php übergeben.

      so kommt es, daß der nutzer bei klick auf den back button zu einem (eigentlich geschützten) frameset zurückkommt, da der browser einfach in seiner history zurückgeht und nicht das script neu anfordert. im oberen frame sitzt dann eine komplett funktionstüchtige navigation, wie gesagt dhtml, die seite muß während des navigierens also auch nicht neu geladen werden. so kann er lustig alle inhalte abrufen, obwohl seine session gelöscht ist.

      das wollte ich durch besagte meta tags bereits im frameset.php verhindern, das ergebnis kennst du ja...

      so langsam glaub ich, daß man dieses verhalten gar nicht durch meta tags zum cache controlling umgehen kann.

      1. Hallo,

        so langsam glaub ich, daß man dieses verhalten gar nicht durch meta tags zum cache controlling umgehen kann.

        Naja, Sven sagt ja schon richtig, dass der Browsercache wohl schlecht zu umgehen ist. Möglich ist wirklich nur, dass die Funktionen der Inhaltsseiten eine vorhandene Session abfragen und voraussetzen. Die Lösung rein über die Navigation ist etwas zu simpel und riskant.

        Grüße aus Würzburg
        Julian

  2. Moin!

    auf der homepage, an der ich gerade arbeite, kann man sich vom öffentlichen bereich in einen geschützten bereich einloggen. dabei wird mit php eine sessionID erzeugt, max. lebensdauer 4 h, und in einer db gespeichert.
    verlassen kann man diesen bereich nur über 'logout', womit die sessionID dann auch gelöscht wird. soweit funktioniert das prima, wird keine gültige sessionID in der db gefunden, nippelt das script per #die('session expired etc. pepe') ab.

    nach erfolgtem logout kommt man wieder in den öffentlichen bereich. nun habe ich das problem, dass man per browser back-button doch wieder in den geschützten bereich zurückkommt.

    Du willst wissen, wie man verhindern kann, daß nachträglich die bereits angeschauten Seiten nochmal hervorgekramt werden.

    Antwort: Garnicht. Deine Seiten landen immer im Browsercache. Die Zurücktaste ruft die Seiten aus dem Cache erneut auf - wobei zu beachten ist: Der Standard definiert, daß man die Seiten durch "zurück" exakt so sieht, wie man sie vorher schon gesehen hat - ein erneuter Abruf vom Server ist nicht vorgesehen und wird beispielsweise von Opera auch nicht vorgenommen. Alle Versuche, das Caching der Seite auf Null zu setzen funktionieren deshalb nicht, weil einfach die alte, gespeicherte Seite genommen wird. Wer will, kann die Seiten im Zweifel immer aus dem Cache aufrufen.

    Was du als einziges verhindern kannst ist, daß die Seite nach dem Logout noch irgendwie funktioniert. Ohne gültige Session sind alle Links tot und tun nichts mehr.

    Da du keine Verschlüsselung benutzt, können die auf der Seite angezeigten Daten ja nicht so kritisch sein, daß sie niemand sehen darf - denn sonst hättest du SSL benutzt, oder?

    - Sven Rautenberg

    1. Hallo Sven,

      Da du keine Verschlüsselung benutzt, können die auf der Seite angezeigten Daten ja nicht so kritisch sein, daß sie niemand sehen darf - denn sonst hättest du SSL benutzt, oder?

      Schon mal dran gedacht, dass nicht jeder seinen Server bei Sich zuhause stehen hat und installieren kann, was er will? Nehen wir beispielsweise einen Terminkalender eines Vereins. Da will ich eben nicht, dass jeder Daten eintragen kann, andererseits ist die Kosten/Nutzen-Rechnung für SSL-Einsatz eindeutig.

      Grüße aus Würzburg
      Julian

      1. Yo!

        Da du keine Verschlüsselung benutzt, können die auf der Seite angezeigten Daten ja nicht so kritisch sein, daß sie niemand sehen darf - denn sonst hättest du SSL benutzt, oder?

        Schon mal dran gedacht, dass nicht jeder seinen Server bei Sich zuhause stehen hat und installieren kann, was er will? Nehen wir beispielsweise einen Terminkalender eines Vereins. Da will ich eben nicht, dass jeder Daten eintragen kann, andererseits ist die Kosten/Nutzen-Rechnung für SSL-Einsatz eindeutig.

        Hab ich doch genau gesagt:

        Wenn die Session abgemeldet ist, kann man lediglich sehen, was der vorher eingeloggte Mensch auch gesehen hat, aber man kann keine Funktionen aufrufen (wenn man das doch kann, ist falsch programmiert worden). Nur wenn die innerhalb des Session übermittelten Daten wirklich vertraulich sind, ist SSL angesagt. Der Kalender wird read-only irgendwo veröffentlicht sein, also ist es relativ egal, ob man den über die alte Session auch sehen kann.

        - Sven Rautenberg

    2. Moin!

      auf der homepage, an der ich gerade arbeite, kann man sich vom öffentlichen bereich in einen geschützten bereich einloggen. dabei wird mit php eine sessionID erzeugt, max. lebensdauer 4 h, und in einer db gespeichert.
      verlassen kann man diesen bereich nur über 'logout', womit die sessionID dann auch gelöscht wird. soweit funktioniert das prima, wird keine gültige sessionID in der db gefunden, nippelt das script per #die('session expired etc. pepe') ab.

      nach erfolgtem logout kommt man wieder in den öffentlichen bereich. nun habe ich das problem, dass man per browser back-button doch wieder in den geschützten bereich zurückkommt.

      Du willst wissen, wie man verhindern kann, daß nachträglich die bereits angeschauten Seiten nochmal hervorgekramt werden.

      Antwort: Garnicht. Deine Seiten landen immer im Browsercache. Die Zurücktaste ruft die Seiten aus dem Cache erneut auf - wobei zu beachten ist: Der Standard definiert, daß man die Seiten durch "zurück" exakt so sieht, wie man sie vorher schon gesehen hat - ein erneuter Abruf vom Server ist nicht vorgesehen und wird beispielsweise von Opera auch nicht vorgenommen. Alle Versuche, das Caching der Seite auf Null zu setzen funktionieren deshalb nicht, weil einfach die alte, gespeicherte Seite genommen wird. Wer will, kann die Seiten im Zweifel immer aus dem Cache aufrufen.

      Was du als einziges verhindern kannst ist, daß die Seite nach dem Logout noch irgendwie funktioniert. Ohne gültige Session sind alle Links tot und tun nichts mehr.

      Da du keine Verschlüsselung benutzt, können die auf der Seite angezeigten Daten ja nicht so kritisch sein, daß sie niemand sehen darf - denn sonst hättest du SSL benutzt, oder?

      • Sven Rautenberg

      hi sven, danke für ansage, so langsam hatte es bei mir auch schon gedämmert :)))
      jetzt weiss ich wenigstens definitiv daß es so <u>nicht</u> geht.

      gruß, micha

  3. Hallo,

    ginge es nicht, die Seite über ein Java-Script jedemal bei betreten neu aufrufen zu lassen, wenn ein Zeitsatempel abgelaufen ist?

    D.h., beim normalen Aufruf vom sServer wird sie generiert und ein Zeitstempel in die Seite gesetzt. Das JavaScript-Script (ohweh) bleibt inaktiv, weil der Zeitbereich noch nicht angelaufen ist.

    Schaltet dann jemand lokal den Cache durch, steht ja noch der alte Zeitstempel drin. Das Script wird also die href erneut aufrufen und bekommt dann vom Server die passende Antwort.

    Ich habs nicht probiert, denke mir nur, dass das so gehen müsste. Und wer partout die Seiten sehen will, wird immer einen Weg finden. Aber 90% der Anwender (die JavaScript eingeschaltet haben) wirst Du so schon mal erschlagen können.

    Gruß

    Tom