Login / Session / Sicherheit

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Login / Session / Sicherheit

    Hallo Zusammen
    Nach langem suchen bin ich auf dieses Forum gestossen und hoffe ihr könnt mir ein wenig weiterhelfen. Ich arbeite noch nicht so lange mit PHP darum fehlt mir evtl. noch das einte oder das andere im verständnis.

    Mein Projekt:

    Ich plane ein Login System das sicher ist. Ich möchte das jeder User sich nur 1 mal einloggen kann und das auch der ganze Ablauf sicher ist so das man nicht einfach seien Session ID faken kann.

    Gedanken die ich mir gemacht habe:
    Login seite:
    Nach der eingabe von Username und Password wird das Password in md5 verschlüsselt und danach wird in der MySQL Datenbank abgefragt ob diese beiden datensätze existieren.

    Wenn dies zutrifft wird in der Datenbank in der Usertabelle einen wert von 0 auf 1 gesetz das soviel bedeutet das der User sich Angemeldet hat.

    Danach wird er auf die hauptseite weitergeletiet.
    Und da hab ich schon das erste Problem. Ich habe schon oft gelesen dass man nicht den Username und das Password in die Session_ID speichern soll. Danach hab ich mir überlegt ich nimm einfach die USER_ID die ich generiere wenn sich der User Registriert aber die wäre ja nicht wirklich schwer zum erraten wenn man die faken will. (ausserdem wird ein späterer userprofil auruf mit : www. example.com /user.php?=1 etc möglich sein (1 = user_id 1)

    Würdet ihr mir Tipps geben was ich in die Session_ID schreiben soll? oder sonst noch Sicherheits vorschläge? Ich lese auf allen Boards verschiedens und dachte somit ich stell die Frage mal auf mein Projekt.

    Gruss Col1n
    Zuletzt geändert von col1n; 23.12.2009, 10:04.

  • #2
    In die Session-ID sollst du gar nichts schreiben. Die erzeugt PHP beim Aufruf von session_start() ganz allein.

    Kommentar


    • #3
      dass man nicht den Username und das Password in die Session_ID speichern soll.
      Das geht ja auch gar nicht!
      Eine ID ist eine ID und kein Speicherort.

      Grundsätzlich reicht es, wenn du die UserID in Session speicherst. Den Rest kann und sollte man von Platte nachladen.

      Ein "eingeloggt" Flag in der DB zu Setzen ist auch bedenklich. Viele loggen sich beim verlassen der Seite nicht aus. Ein "lastActivity" Zeitstempel ist da meist sinnvoller.

      Warum willst du Doppellogins ausschließen?
      Betreibst du ein Geldinstitut?
      Wir werden alle sterben

      Kommentar


      • #4
        Erstmals Danke für eure beiden Antworten

        Alles klar, und was wird dann in die Session_ID geschrieben? eine zufallzahl? ist die Sicher? kann ich die überprüfung nur durch diese Variable machen?

        Das mit dem Doppellogin wollte ich einfach so das man nicht mit mehreren IP's auf dem Server ist. Muss ich mir Nochmals überdenken.

        Nachdem ich das Passwort überprüft habe, was soll ich den in die Session schrieben? damit es Sicher ist? Wie gesagt die USER_ID vom User halte ich nicht für Sinnvoll weil die nicht schwer zum erraten ist.

        Was ich vorhin noch gelesen hab das man den Session ordner umbenennen soll oder nicht auf den c:..../temp legen soll?


        (Das ganze grenzt an ein Schulprojekt das nicht für alle zugänglich ist, daher das Login)

        Kommentar


        • #5
          Das mit der SessionID überlass dem PHP!

          Was soll an der UserID in Session bedenklich sein?
          Selbst wenn die jemand errät, was hätte er davon?
          Wir werden alle sterben

          Kommentar


          • #6
            Verstehe ich da etwas falsch evtl?

            Wenn ich die User_ID in die Session reisnchreibe... und die User_id 's sind bekannt.

            sagen wir 1-10

            ist es ihm dann nicht möglich seine session von seinem PC zu faken und so sich mti dem user 1 anmelden?

            Kommentar


            • #7
              Wie sollte das möglich sein?
              Mir ist kein Weg bekannt.
              Wir werden alle sterben

              Kommentar


              • #8
                Ich frag ja nur, ich möchte das dass ganze Sicher ist...

                Kommentar


                • #9
                  Du scheinst nicht verstanden zu haben, wie Sessions funktionieren.
                  Du rufst session_start() auf. PHP prüft daraufhin, ob ein Session-Cookie vom Browser an den Server übertragen wurde. Falls nicht, wird eine Zufallszahl erzeugt, als Session-Cookie an den Browser geschickt und auf dem Server wird eine Datei mit der ID als Namen gespeichert. Alles was dann in $_SESSION abgelegt wird, schreibt PHP in diese Datei. Legst du z.B. die User-ID in $_SESSION ab, verlässt dieser Wert niemals den Server. Beim nächsten Request findet wieder ein session_start() statt. Nun ist ein Session-Cookie vorhanden und PHP lädt die Daten aus dem Session-File in $_SESSION.

                  Wenn nun ein User seinen Session-Cookie manipuliert, kann er das nur auf eine einzige Weise machen: Er verändert die Session-ID. Denn mehr steht in dem Cookie nicht drin und wird von PHP auch nicht ausgewertet. Um eine andere Session zu übernehmen, muss der User deren ID erraten. Das ist aufgrund der Art wie Session-IDs erzeugt werden ein ziemlich aussichtsloses Unterfangen. Eher hat man einen 6er im Lotto, als eine gültige Session-ID zu erraten.

                  Viele kommen auf die Idee, die IP in der Session zu speichern und wenn die nicht mehr passt, davon auszugehen, dass der User die Session-ID manipuliert hat. Das ist aber Quatsch, denn der User hat wahrscheinlich nur eine Zwangstrennung vom Provider erfahren (reconnect, neue IP). Jedenfalls wahrscheinlicher als Erfolg beim Erraten einer Session-ID.

                  Kommentar

                  Lädt...
                  X