Malcolm Beck`s: Ein Loginscript

Beitrag lesen

Hallo werte Freunde,

Ich habe mir vor kurzem eine Klasse für ein rudimentäres Login geschrieben, welches auf das Sessionbasierte Loginscript vom Benjamin beruht (finde es leider nicht mehr). Ich hab's nur um Cookies erweitert, so das User eingeloggt bleiben können, wenn sie sich nicht explizit ausloggen. Und hierzu habe ich eine kleine Frage.

Ich speichere die Logindaten in Form von:

userid | Pass (gehasht) 1 | 4a4350df2403b94a13304ee88b861041

Beim Login versuche ich 2 Cookies zu setzen. Ein SESSION-Cookie und einen normalen. Beide erhalten den folgenden Wert:

// userid mit irgendwas multipliziert
$_SESSION['USER'] = '541 4a4350df2403b94a13304ee88b861041';
$_COOKIE['USER']  = '541 4a4350df2403b94a13304ee88b861041';

Und dann prüfe ich:

// Wenn Session, aber kein Cookie, Loginformular - damit ist schonmal Session Hijacking unterbunden
if $_SESSION['USER'] AND !$_COOKIE['USER']
  exit()

// Wenn Session und Cookie vorhanden sind, Datenbankabfrage sparen, da die Sessiondaten auf dem Server liegen und vom Nutzer nicht geändert werden können
if $_SESSION['USER'] AND $_COOKIE['USER']

  // Sessiondaten mit Cookiedaten vergleichen, wenn beide richtig, ist User eingeloggt
  // Kann ich das so machen?
  $_COOKIE['USER'][0] == $_SESSION['USER'][0]
  $_COOKIE['USER'][1] == $_SESSION['USER'][1]

// Automatisches Login: Datenbank mit den Daten im Cookie abfragen, wenn keine Session vorhanden ist
if $_COOKIE['USER'] AND !$_SESSION['USER']

  // wenn beide Daten im Cookie richtig sind, ist User authentifiziert
  $_COOKIE['USER'][0] == $_USERINDB
  $_COOKIE['USER'][1] == $_USERPASSINDB

Ich könnte das ganze jetzt um eine weitere Prüfung erweitern, in dem ich einfach alle vom User genutzten IPs beim Login checke, ob die aktuell nur mit Cookie aufrufende IP schon einmal genutzt wurde, wenn nicht, Login erzwingen. Ohne diese Prüfung könnte ein Hacker, wenn er die Userid und das gehashte Passwort richtig errät, das Profil kapern. Was aber ja auch schon schwierig genug sein dürfte.

Ich komme mit derzeit rund 1000 Zeilen Code aus (ohne IP-Check, mit wären's vllt. 30 - 40 mehr), da habe ich irgendwie bedenken, ob das wirklich so sicher sein kann (fühlt sich zumindest halbwegs sicher an, und etwas Weltbewegendes ist das ganze ja auch nicht unbedingt). Hier könnt ihr das ganze Live testen. Email ist nicht zwingend erforderlich, ihr könnt euch auch mit einzelnen Buchstaben registrieren.

Was passiert denn in grossen Frameworks, dass die teilweise tausende Zeilen Code benötigen? Selbst wenn ich jetzt noch eine Tabelle mit Userrechten laden würde, wären es lediglich ein paar Zeilen mehr. Was prüfen die noch alles, was wäre noch möglich oder ratsam?

Bis bald

--
Hosen sind Blau
0 58

Ein Loginscript

Malcolm Beck`s
  • datenbank
  • php
  1. -2
    pl
    1. 0
      Orlok
      • perl
      • zu diesem forum
  2. 0
    Jörg Reinholz
    1. 0
      Jörg Reinholz
      1. 0
        Malcolm Beck`s
        1. 0
          Jörg Reinholz
          1. 0
            woodfighter
            1. 0
              Auge
              • datenbank
              • menschelei
              • php
              1. 0
                Christian Kruse
                1. 0
                  Jörg Reinholz
          2. 0
            Malcolm Beck`s
            1. 2
              Auge
              • php
              • sicherheit
              1. 0
                Malcolm Beck`s
                1. 2
                  Jörg Reinholz
                  1. 0

                    Ein Loginscript - so weit, so gut

                    Malcolm Beck`s
                    1. 0
                      Matthias Apsel
                      1. 0
                        Malcolm Beck`s
                        1. 1
                          Auge
                          • internet-anbindung
                          • sicherheit
                          1. 0
                            woodfighter
                            • internet-anbindung
                            1. 0
                              Auge
                              1. 0
                                woodfighter
                                1. 0
                                  Auge
                      2. 0
                        woodfighter
                        1. 0
                          Jörg Reinholz
                        2. 0
                          Matthias Apsel
                          1. 0
                            woodfighter
                            • internet-anbindung
                    2. 1
                      Jörg Reinholz
                      • php
                      • programmiertechnik
                      • programmiertechnik
                      1. 0

                        Ein Loginscript - so weit geklärt

                        Malcolm Beck`s
                    3. 1
                      Jörg Reinholz
                      1. 0
                        Malcolm Beck`s
            2. 1
              woodfighter
    2. 0
      Malcolm Beck`s
      1. 0
        woodfighter
      2. 1
        Jörg Reinholz
    3. 3
      1unitedpower
  3. 2
    Felix Riesterer
    1. 4
      Christian Kruse
      1. 0
        Malcolm Beck`s
        1. 1
          Christian Kruse
          1. 0
            Malcolm Beck`s
            1. 0
              Christian Kruse
              1. 0
                Malcolm Beck`s
            2. 2
              woodfighter
              1. 0
                woodfighter
                • sicherheit
            3. 1
              Tabellenkalk
              1. 0
                Auge
                • datenbank
                • menschelei
                • php
              2. 0
                Jörg Reinholz
      2. 0
        Felix Riesterer
        1. 0
          Christian Kruse
      3. -2
        pl
        1. 0
          woodfighter
    2. 0
      Malcolm Beck`s
      1. 3
        Christian Kruse
        1. 0
          Malcolm Beck`s
          1. 0
            Christian Kruse
            1. 0
              Malcolm Beck`s
              1. 0
                Christian Kruse