Hans: Session oder Cookies bei Loginsystemen?

Hi,,

Bisher hatte ich für meine Loginsysteme eigentlich immer Sessions verwendet, weil Cookies irgendwie zu unausgereift sind (wie ich finde), außerdem ist man auf clientseitige Unterstützung angewiesen.
Jedoch gibt es ja die Sicherheitslücke der Seession-ID, die ohne Ausloggen einfach in Logfiles eingesehen und verwendet werden kann...

Wäre das Grund genug, mein ganzes System auf Cookies umzustellen?

Danke & MfG
Hans

  1. Jedoch gibt es ja die Sicherheitslücke der Seession-ID, die ohne Ausloggen einfach in Logfiles eingesehen und verwendet werden kann...

    Das ist keine Sicherheitslücke, vorausgesetzt Du behandelst Deine Protokolle wie Du sie behandeln solltest: vertraulich. Und ob Du als Seitenbetreiber nun über das Protokoll an die Kennung kommst oder im Dateisystem des Servers nachschaust, ist ziemlich wurscht.

    Da aber nicht jeder weiß, was es mit einer URL auf sich hat, ist es durchaus eine Sicherheitslücke, wenn jemand eine solche URL mit Kennung in irgendein Forum schreibt.

    Wäre das Grund genug, mein ganzes System auf Cookies umzustellen?

    Ja.

    Gruß,
      soenk.e

    PS: Auch Sessions benutzen normalerweise Cookies zu Speicherung der Kennung. Die Benutzung der URL ist IMHO eigentlich eher die Ausnahme.

    1. Hi,

      also wäre es nicht unbedingt nötig (Ich finde Sessions irgendwie auch praktischer), weil die Sessions auch in Cookies gespeichert werden?

      Kann ich mit ini_set einstellen, dass eine session als Cookie gespeichert werden soll?

      Danke,
      Hans

      1. also wäre es nicht unbedingt nötig (Ich finde Sessions irgendwie auch praktischer), weil die Sessions auch in Cookies gespeichert werden?

        Bevor Du das jetzt durcheinander bringst: Die Session_daten_ bleiben grundsätzlich auf dem Server. Diese Daten werden über die Sessionkennung angesprochen - und diese Kennung ist es, die entweder an die URL angehängt oder als Cookie im Browser gespeichert werden kann.

        Du kannst also Deine komplette derzeitige Sessionfunktionalität behalten, es ändert sich nur die Behandlung der Kennung,..

        Kann ich mit ini_set einstellen, dass eine session als Cookie gespeichert werden soll?

        ..was eine reine Einstellungssache ist, ja. Die Option nennt sich session.use_cookies und ist (was mich in Deinem Fall wundert) normalerweise eingeschaltet; PHP verwendet also normalerweise Cookies, nicht die URL, für die Kennung.

        Es gibt noch weitere Einstellungen für diesen Bereich. In der PHP-Anleitung, Kapitel Sessions, sind alle ausführlich beschrieben.

        Gruß,
          soenk.e

        1. Hi,

          eigentlich wird die ID auch nur am Anfang angehängt...

          1. Hallo Hans,

            eigentlich wird die ID auch nur am Anfang angehängt...

            Klar. Das liegt daran, dass PHP ja erkennen muss, ob der Browser Cookies akzeptiert. Und das kann PHP nur, indem es prüft, ob ein derartiges Cookie bereits gesetzt ist. Bei der ersten Seite ist es aber auf jeden Fall nicht gesetzt, daher hängt PHP das ganze sicherheitshalber mal an die URL heran, damit die Session-ID auf jeden Fall ankommt. Falls bei der nächsten Seite dann ein Cookie gesetzt ist, merkt PHP das und hängt die Session-ID nicht mehr ran.

            Du kannst das automatisch Anhängen von Session-IDs so verhindern:

            1. In der php.ini stellst Du

            session.use_trans_sid = 0

            ein. (sofern Du darauf zugreifen kannst)

            2. Eine .htacccess-Datei mit folgendem Inhalt:

            php_flag session.use_trans_sid 0

            3. In Deinem Script _vor_ session_start():

            ini_set ("url_rewriter.tags", "");

            (session.use_trans_sid kann man per ini_set nicht einstellen, ich habe das aber bereits als Feature-Request eingebracht, vielleicht kommt es ja in einer der nächsten Versionen: http://bugs.php.net/bug.php?id=24693)

            Da Du trans_sid ausschaltest, solltest Du in Deiner Login-Logik beim Teil des Scripts, der den Submit des Loginformulars abfängt, prüfen, ob der Cookie gesetzt ist, um Leute zu erkennen, die Cookies deaktiviert haben:

            if (!isset ($_COOKIE[session_name()])) {
              echo "Fehler: Sie müssen Cookies aktivieren, um weiterzukommen!";
            }

            Viele Grüße,
            Christian