Henryk: Weitergebung von Variablen

Ich habe gerade ein simples LOGIN Script gebastelt. Das Login Script überprüft je nachdem auch woran der LOGIN gescheitert ist (sofern er das ist)

"incorrect username/email";
"incorrect password";
"please insert your username/email and password";
"session expired";

Diese Nachrichten sollen auf der Loginseite dann EINMALIG erscheinen und vom vorigen Script mitgeliefert werden. Bisher habe ich es simpel über $_GET Veriablen in der URL mitgegeben. Jedoch ermöglicht mir diese Version nicht direkt (ohne JS etc.) eine Möglichkeit das es auch wirklich nur EINMAL erscheint (bei einem Refresh bliebe die Error Message erhalten).

Welche Möglichkeiten gibt es also noch um dies zu verwirklichen ?

PHP GET Variablen mitgeben und URL via JS bearbeiten nach Aufrum der Login Seite ?
Session Variablen mitgeben ?
Eine Möglichkeit versteckt POST Variablen mitzugeben ?

welche Lösung ist (noch) möglich und am saubersten ?

mfg

Henryk

  1. Hallo Henryk,

    welche Lösung ist (noch) möglich und am saubersten ?

    Eine Weitergabe über $_GET oder $_POST ist immer eine Sicherheitslücke.
    Sessions (mit $_SESSION) sind genau hierfür gedacht.

    Grüße

    Marc Reichelt || http://www.marcreichelt.de/

    --
    Linux is like a wigwam - no windows, no gates and an Apache inside!
    Selfcode: ie:{ fl:| br:> va:} ls:< fo:} rl:( n4:( ss:) de:> js:| ch:? sh:| mo:) zu:)
    1. Eine Weitergabe über $_GET oder $_POST ist immer eine Sicherheitslücke.
      Sessions (mit $_SESSION) sind genau hierfür gedacht.

      Nun habe ich aber das Problem ... was ist wenn meine Session expired ist ... wie teile ich das dann meinem LoginScript mit ?

      Ich mein ich kann schlecht eine Session Variable weitergeben wenn keine Session exisitiert - oder habe ich einen Denkfehler ?

      1. Hallo,

        Die Tatsache, ob eine Session existiert, oder eben nicht, _ist_ doch eine Variable, oder?

        netten Tag
        ^da Powl

        --
        ===============================
        powl.hat-gar-keine-homepage.de/
        1. Hallo,

          Die Tatsache, ob eine Session existiert, oder eben nicht, _ist_ doch eine Variable, oder?

          netten Tag
          ^da Powl

          es wird auf der Loginseite aber immer eine Session existiere da ich ständig eine initialisieren muss vorm Header - ansonten kann ich schlecht meine Session Variablen auslesen ^^

          1. Hallo,

            es wird auf der Loginseite aber immer eine Session existiere da ich ständig eine initialisieren muss vorm Header - ansonten kann ich schlecht meine Session Variablen auslesen ^^

            Dann wäre es vielleicht besser, nur dann eine Session zu starten, wenn nicht bereits eine Session besteht? Möglicherweise wirkt sich das auch störend aus, bestehende Sessions neu zu starten?

            netten Tag
            ^da Powl

            --
            ===============================
            powl.hat-gar-keine-homepage.de/
            1. Dann wäre es vielleicht besser, nur dann eine Session zu starten, wenn nicht bereits eine Session besteht? Möglicherweise wirkt sich das auch störend aus, bestehende Sessions neu zu starten?

              Ist es nicht so das ich auf jedem neuen Script/auf jeder neuen Seite die Session neu starten muss damit sie wirksam wird ? *wunder*

              1. Hallo,

                Ist es nicht so das ich auf jedem neuen Script/auf jeder neuen Seite die Session neu starten muss damit sie wirksam wird ? *wunder*

                Nicht wundern, lesen!
                Sessions bieten ja gerade den Vorteil Daten über Seitenaufrufe hinweg zu speichern. Mache da doch einfach Gebrauch von ;)
                netten Tag
                ^da Powl

                --
                ===============================
                powl.hat-gar-keine-homepage.de/
              2. Hallo Henryk,

                Ist es nicht so das ich auf jedem neuen Script/auf jeder neuen Seite die Session neu starten muss damit sie wirksam wird ? *wunder*

                Korrekt - der Befehl session_start() muss auf jeder Seite aufgerufen werden, die Sessions verwendet.
                Wie Sven betrachte ich Sessions einfach immer als existent (und rufe daher auf jeder Seite, die Sessions verwendet, session_start() auf).
                Dann überprüft man einfach über eine Variable, ob der entsprechende Benutzer eingeloggt ist.

                Wo liegt da das Problem? :)

                Grüße

                Marc Reichelt || http://www.marcreichelt.de/

                --
                Linux is like a wigwam - no windows, no gates and an Apache inside!
                Selfcode: ie:{ fl:| br:> va:} ls:< fo:} rl:( n4:( ss:) de:> js:| ch:? sh:| mo:) zu:)
                1. Hallo,

                  Korrekt - der Befehl session_start() muss auf jeder Seite aufgerufen werden, die Sessions verwendet.

                  Jetzt komme ich ins Schlingern. Wieso _musst_ Du jedesmal session_start() verwenden? Und wozu ist dann session_register()?
                  Aber vielleicht blicke ich da auch nicht durch? 8-]

                  netten Tag
                  ^da Powl

                  --
                  ===============================
                  powl.hat-gar-keine-homepage.de/
                  1. Hallo Powl,

                    Jetzt komme ich ins Schlingern. Wieso _musst_ Du jedesmal session_start() verwenden?

                    Damit die superglobale Variable $_SESSION angelegt und falls bereits eine Session besteht mit den Session-Variablen befüllt wird.

                    Und wozu ist dann session_register()?

                    session_register() sollte nicht mehr verwendet werden, da es nur bei aktiviertem register_globals, und deswegen spätestens ab PHP 6 überhaupt nicht mehr, funktioniert.

                    Aber vielleicht blicke ich da auch nicht durch? 8-]

                    Schau dir einfach nochmal das Session-Kapitel im PHP-Handbuch an, besonders die Beispiele.

                    Schöne Grüße,

                    Johannes

      2. Yerf!

        Ich mein ich kann schlecht eine Session Variable weitergeben wenn keine Session exisitiert - oder habe ich einen Denkfehler ?

        Dann mach doch einfach eine neue Session auf und speichere darin ab, das die alte abgelaufen war.

        Gruß,

        Harlequin

  2. Hallo Henryk,

    "incorrect username/email";
    "incorrect password";

    Du solltest diese Fehlermeldungen zu _einer_ zusammenfassen, die in beiden Fällen ausgegen wird. Das ermöglicht einem Angreifer weniger Rückschlüsse, da er nicht weiß, ob er einen richtigen Benutzernamen oder ein richtiges Passwort geraten hat, sondern nur, dass es nicht eine korrekte Kombination von Benutzername und Passwort ist.

    Wird beispielsweise bei einem korrekten Passwort aber falschem Benutzername nur ausgegeben, dass der Benutzername falsch ist, weiß der Angreifer, dass _irgendein_ Benutzer zumindest dieses Passwort hat. So kann es passieren, dass ein Angreifer in einem Brute-Force-Durchgang mehrer Passwörter erhält, von denen er dann weiß, dass ein Benutzer dazu existiert.

    Gelangt nun ein Angreifer irgendwie an eine Liste von Benutzernamen, brauch er nicht mehr für jeden Benutzer alle Passwörter durchzuprobieren sondern nur noch die, für die er weiß, dass irgendjemand sie verwendet. Das senkt seinen Aufwand beträchtlich, und damit natürlich auch die Sicherheit.

    Schöne Grüße,

    Johannes