Login-Problem

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

  • Login-Problem

    Hallo,

    ich habe ein Login (Benutzername, Kennwort), bei dem man, bei Eingabe der korrekten Daten zu einer Seite start.php weitergeleitet wird. Falls der Benutzername "admin" ist, wird man zur Seite admin.php weitergeleitet. Vor der Weiterleitung wird eine Session gestartet, die, solange man sich nicht ausloggt, von Seite zu Seite weitergeführt wird.

    In der Login-Datei:
    PHP-Code:
    ini_set('session.use_cookies'1);
    ini_set('session_use_cookies_only'1);
    session_start();
    $_SESSION['user_id'] = $data["id"];
    $_SESSION['sid'] = session_id();
    if (
    $name == "admin")
    {
         
    header("Location: admin.php");
    }
    else
    {
         
    header("Location: start.php");
    }
    exit; 
    Auf den Folgeseiten:
    PHP-Code:
    ini_set('session.use_cookies'1);
    ini_set('session_use_cookies_only'1);
    session_start();

    if(
    $_SESSION['sid'] == session_id())
    {
    //Seiteninhalt
    }
    else
    {
    echo 
    "Sie sind nicht eingeloggt";

    Das Problem ist, dass wenn man als "normaler" User eingeloggt ist, einfach admin.php in die Adresszeile eingeben kann und ohne weiteres im Admin-Bereich landet, da eine Session ja bereits besteht.

    Wie kann ich das Problem beheben?

    Vielen Dank im Voraus

    Viele Grüße,
    Mario

  • #2
    Du musst natürlich auch dafür sorgen, dass die admin.php prüft, ob der Benutzer, der sie aufgerufen hat, auch berechtigt ist, das zu tun. Also musst du entsprechende Änderungen an der admin.php selbst vornehmen, nämlich die Überprüfung, ob es sich um "admin" handelt.

    Davon abgesehen birgt dein System eventuell noch andere Risiken. So ist es für dich besonders wichtig, dass Benutzernamen einmalig sein müssen, denn sonst kann sich jemand unter dem Namen "admin" registrieren, der eigentlich gar keiner sein soll, und hat damit deinem System gezeigt, wer die Hosen anhat.

    Allgemein würde ich dir eher dazu raten, das Ganze besser zu durchdenken und den Zugang zu kritischen Seiten nicht nur anhand eines Benutzernamen zu gestatten.
    Zuletzt geändert von Griecherus; 17.05.2007, 19:12.
    Nieder mit der Camel Case-Konvention

    Kommentar


    • #3
      Hi,
      danke schon mal für die schnelle Antwort.

      Ich habe jetzt beim Login, falls sich der Admin anmeldet, eine neue Session-Variable "is_admin = TRUE" deklariert, die dann auf jeder Admin-Seite abgefragt wird.

      Benutzername und Kennwort werden in einer Datenbank verwaltet und bei Registrierung auf Einzigartigkeit geprüft.

      Ich hoffe, dass ich jetzt einen einigermaßen sicheren Login habe, oder sieht noch jemand triviale Sicherheitslücken?

      Falls jemand einen guten Link zu diesem Thema hat (ja, ich hab vorher Google verwendet), würde ich mich darüber freuen!

      Viele Grüße,
      Mario

      Kommentar


      • #4
        Gut. Nach welchen Kriterium wird bei einem Login ausgemacht, ob die is_admin-Flag auf true gesetzt wird?
        Ansonsten ist es relativ schwer zu sagen, ob es noch Sicherheitslücken in deinem Login gibt, ohne Code zu sehen. Interessant wären natürlich die SQL-Anfragen, Stichwort SQL-Injection. Vielleicht postet du ja mal entsprechenden Code, dann schauen wir mal.
        Nieder mit der Camel Case-Konvention

        Kommentar


        • #5
          Nach Eingabe von Name (die Email-Adresse) und Passwort wird erst überprüft, ob der Name vorhanden ist und ob das dazugehörige Passwort stimmt, danach wird die o.a. Verzweigung durchgeführt.

          Das Login-Formular ist mit QuickForm erstellt, wobei der Login-Namen (die Email-Adresse) auf ein richtiges Email-Format geprüft wird. Falls man also SQL-Injection versucht, wird eine falsche Eingabe erkannt.

          Ich würde ja den Quellcode posten, da aber einige Klassen davon abhängen, wäre er recht lang. Mit Schlagworten nach denen ich googlen kann, wie eben SQL-Injection, ist mir schon sehr geholfen!

          Ich habe gelesen, dass es sinnvoll ist, bei jeder Aktion eine neue Session-ID mit session_regenerate_id zu generieren, um ein abhören bzw. Austesten der SID zu verhindern...

          Kommentar


          • #6
            Damit ist mir das Kriterium, nach dem dein Skript einen Administrator als solchen erkennt, immer noch nicht klar.

            SQL-Injections ist ein sehr wichtiges Stichwort. Auf QuickForm würde ich mich was das angeht nicht verlassen; deine SQL-Anfragen müssen für sich selbst sicher sein, vom Benutzer stammende Parameter dementsprechend maskiert werden etc. pp.

            Die Session-ID bei jedem Request neu zu generieren, halte ich für unnötig. Das gilt allerdings nicht, wenn es sich um kritische Aktionen handelt (nach erfolgreichem Login, Änderungen am Profil oder sonstiges).
            Nieder mit der Camel Case-Konvention

            Kommentar


            • #7
              Also: nachdem Email und Password mit der DB abgeglichen und als korrekt erkannt sind, wird auf die Seite admin.php weitergeleitet, wenn die Emailadresse die des Admins ist (dann wird außerdem is_admin = true gesetzt), ansonsten wird auf die seite start.php verwiesen...

              Kommentar


              • #8
                Wieso fügt du deiner Datenbanktabelle keine Spalte "is_admin" hinzu? Damit hättest du auch die Möglichkeit problemlos(er) andere Benutzer zu Admins zu machen, ohne ihre E-Mail-Adressen mit einer ellenlangen Liste abgleichen zu müssen. Nur als Vorschlag.

                Wenn du das Ganze dynamischer gestalten möchtest, damit du auch mehrere Admins und gegebenenfalls auch andere Gruppen bedienen kannst, dann such mal nach Rechtesystem im Forum oder bei Google, da wirst du fündig.

                Ich hoffe dir ist geholfen.
                Nieder mit der Camel Case-Konvention

                Kommentar


                • #9
                  sehr guter Vorschlag

                  Vielen Dank für die schnelle Hilfe!

                  Kommentar

                  Lädt...
                  X