Timm: Sessions und Sicherheit

Hallo zusammen,

also ich habe gerade mit PHP angefangen und versuche jetzt einen passwortgeschützten Bereich anzulegen. Das geschieht mittels eines Benutzernamens und eines Passwortes, welche in einer DB stehen. Um den Benutzer durch die verschiedenen Seiten zu verfolgen benutze ich eine Sessionvariable. Mein Problem ist nun, das wenn derjenige sich nicht ausloggt, wobei die Session zerstört wird, dann bleibt die Sesion aktiv und ein anderer Benutzer kann sich ohne erneute Anmeldung einlogen. Gibt es dafür eine Lösung, oder ist das einfach so und es hilft nur ein Warnhinweis.

Besten Dank.

Viele Grüsse
Timm

  1. das verstehe ich nicht.
    eine sessionvariable wird lokal bei dem user angelegt. und wenn er sich nicht abmeldet, vegetiert sie bei ihm auf dem rechner vor sich hin. demnach kann kein anderer user auf genau diese zugreifen. prinzipiell solltest du auch bei dem anlegen von sessionvariablen eine zeit mit angeben, sprich: nach wieviel minuten die session zerstört werden soll.
    und zudem solltest du das pw nicht direkt in die session eintragen, oder zumindest vorher mit base64encode($pw) codieren...
    but ask someone else, too...
    nice day
    chris

    1. Hi Chris

      eine sessionvariable wird lokal bei dem user angelegt. und wenn er sich nicht abmeldet, vegetiert sie bei ihm auf dem rechner vor sich hin.

      Ja das ist klar, aber es gibt ja öffentliche Computer, bei denen eben alle Benutzer diese lokalen Daten teilen.

      demnach kann kein anderer user auf genau diese zugreifen. prinzipiell solltest du auch bei dem anlegen von sessionvariablen eine zeit mit angeben, sprich: nach wieviel minuten die session zerstört werden soll.

      Danke für den Tipp.

      und zudem solltest du das pw nicht direkt in die session eintragen, oder zumindest vorher mit base64encode($pw) codieren...

      In der Session selbst wird nur eine ID durchgeschleift.

      ciao
      Timm

      1. Ja das ist klar, aber es gibt ja öffentliche Computer, bei denen eben alle Benutzer diese lokalen Daten teilen.

        stimmt, daran habe ich nicht gedacht. aber eine lösung wüsste ich jetzt auch nicht wirklich...

        1. Hi,

          "Sessions" können nur serverseitig geführt werden, weil "Sessions" nicht von http (verbindunsgloses Prot) unterstützt werden. Da "Sessions" nur logisch geführt werden, geht an einem "öffentlichen" Computer wohl nichts.

          Gruss,
          Lude

          Ja das ist klar, aber es gibt ja öffentliche Computer, bei denen eben alle Benutzer diese lokalen Daten teilen.

          stimmt, daran habe ich nicht gedacht. aber eine lösung wüsste ich jetzt auch nicht wirklich...

          1. "Sessions" können nur serverseitig geführt werden,

            habe ich da jetzt was nicht verstanden ?
            session_variablen werden doch auf dem lokalen rechner des users 'gespeichert' - und das ist alles andere als serverseitig oder etwa nicht ?

            1. Hallo,

              habe ich da jetzt was nicht verstanden ?
              session_variablen werden doch auf dem lokalen rechner des users 'gespeichert' - und das ist alles andere als serverseitig oder etwa nicht ?

              Um mal Thomas J.S. zu zitieren: "Soviel Halbwissen wie in diesem Thread habe ich schon lange nicht mehr gesehen."

              1. Sessions funktionieren so: Der Server speichert sich die Daten unter einer ID ab und übermittelt _nur_ die ID an den User.

              2. Session-Cookies sind normalerweise so eingestellt, dass sie bei Beenden des Browsers automatisch gelöscht werden sollen. Wenn die Session-ID aber über die URL mitgeliefert wird, dann steht sie noch in der History. Wenn der User sich nicht ausloggt und den Browser nicht beendet, dann ist ihm wirklich nicht mehr zu helfen.

              3. Sessions verfallen nach einer Zeit serverseitig. D.h. selbst mit ex-gültiger ID sind die Session-Daten nach einer Zeit weg.

              4. Diese Einstellungen findest Du in der php.ini. Ich würde Sie aber in einer zentralen Datei im Script immer selbst setzen (ini_set(), session_name() vor session_start()), damit man sich sicher sein kann, egal auf welcher Installation man ist.

              5. session_destroy() löscht _nur_ die serverseitigen Daten, nicht den Cookie oder das aktuell geladene Session-Array.

              6. Dass jemand die Session-ID vielleicht errät, ist extrem unwarscheinlich, aber nicht unmöglich. Im Archiv gibts dazu einige Diskussionen.

              Sind jetzt noch Fragen offen?

              Grüße,

              Christian

              1. Sind jetzt noch Fragen offen?

                Grüße,

                Christian

                Hi,

                sehr gut, sehr gut.
                Eine kleine Frage noch; warum nimmt PHP keine GUIDs? Und was sind GUIDs?    :-)

                Gruss,
                Lude

                1. Hallo!

                  sehr gut, sehr gut.
                  Eine kleine Frage noch; warum nimmt PHP keine GUIDs? Und was sind GUIDs?    :-)

                  Diese Frage ist wohl symtomatisch für diesen Thread ;-)

                  Grüße
                  Andreas

              2. Hi Christian,

                vielen Dank erstmal.

                1. session_destroy() löscht _nur_ die serverseitigen Daten, nicht den Cookie oder das aktuell geladene Session-Array.

                Ich habe gelesen, das man dies durch das Löschen des Cookies verhindern kann.

                ciao
                Timm

                1. Hallo Timm,

                  1. session_destroy() löscht _nur_ die serverseitigen Daten, nicht den Cookie oder das aktuell geladene Session-Array.

                  Ich habe gelesen, das man dies durch das Löschen des Cookies verhindern kann.

                  Natürlich kannst Du den Cookie löschen. Aber das bringt dem User rein gar nichts, da die Session-Datei schon gelöscht worden ist.

                  Grüße,

                  Christian