Suche Tutorial für sehr sicheren Login-Script! (mySQL, sessions)

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Suche Tutorial für sehr sicheren Login-Script! (mySQL, sessions)

    Hallo,

    Tutorials zu Login-Scripts (mit und ohne Sessions) gibt es ja wie Sand am Meer. Und dass Login-Scripts, die rein mit PHP funktionieren auch nicht sicher sind, ist mir mittlerweile klar. Bei den Tutorials im web kann ich mir aber nie sicher sein, ob ich da nun wirklich ein sicheres Login-System mit dem Tutorial baue.

    Bei mir handelt es sich um ein Login-System für ein CMS, welches schon sehr sicher sein sollte.

    habt ihr eventuell ein Link zu einem sehr guten Tutorial?
  • Das Login-Thema ist nur ein kleiner Teil des Security-Problems. Du solltest dich auch über anderes Themen diesbezüglich informieren. Fehler in diesem Bereich sind leider die Regel.
    Hier ein Link dazu:
    flourishlib.com/docs/Security

    Was mir spontan zur Passwort und Login-Sicherheit einfällt:
    - HTTPS verwenden
    - Neue Session-ID im Cookie des Clients beim Wechsel von HTTP auf HTTPS
    - Neue Session-ID im Cookie des Clients beim Login
    - Session-ID in der URL sollte ignoriert (redirect) werden, damit niemand dem Opfer eine Fremdsession unterschieben kann
    - Guter Passworthash-Algorythmus (MD5 ist viel zu alt).
    - Mehrfachverschlüsslung (Soll einfach nur die Codierungszeit erhöhen. Das stört den Normalnutzer wenig, der Angreifer der aber 1000de Passwörter encodieren will, braucht viel mehr Zeit)
    - Passwort-Salz
    - Dem Nutzer bei der Passworteingabe anzeigen wie sicher sein Passwort ist
    - Keine zusätzlichen Informationen bei falscher Eingabe ausgeben (z.B. ob der Nutzer existiert oder nur das Passwort falsch ist)
    - Auch wenn der Nutzer nicht existiert, solltest du das passwort codieren, damit ein Angreifer nicht durch Zeitmessung herausbekommt ob der Nutzer existiert oder nicht
    - Passwort Vergessen: E-Mail an Nutzer mit URL, die nur wenige Minuten gültig ist. Dort kann er dann sein neues Passwort eingeben. Kein generiertes Passwort per E-Mail wo es ewig im Posteingang unverschlüsselt rummliegt.
    - Formulare (generell, aber besomders in der geschützten Zone) müssen einen zufallsgenerierten Wert in einem hidden-Field beinhalten, der auch serverseitig an der Session gespeichert wird. Warum? Weil sonst ein Angreifer (der 0 Zugriff hat) einem Nutzer z.B. eine HTML-Email zuschicken kann, die versteckte Formulare beinhaltet. Der Zufallswert muss natürlich beim Empfangen der Formulardaten geprüft werden und bei Nichtübereinstimmung --> Fehlermeldung.

    So, mehr fällt mir auf Anhieb nicht ein.
    Aber wie du schon siehst --> großes Gebiet. Deswegen selber schlau machen.

    Edit:
    Passt auch eher nicht in die Datenbank-Sektion
  • Ich habe vergessen zu erwähnen, dass man dem Benutzer nur eine beschränkte Anzahl von falschen Logins in einer bestimmten Zeit zugestehen sollte.
    Danach geht der Login einfach für z.B. 3 Stunden nicht mehr, egal ob richtiges Passwort oder nicht.
    Natürlich wird auch dieser Zustand nach außen hin nicht Preis gegeben und deswegen muss auch wieder das Passwort schön gehasht werden, damit der Angreifer keine Zeitmessung vornehmen kann.