Was ist für einen sicheren Login alles zu beachten und wie setzte ich diese um?
Viele Login-Skripte sind heutzutage leider schon leicht "Hackbar" und halten selbst einfachen Hacker Programmen nicht stand.
Ich musste mich in den letzte Wochen vermehrt damit befassen und möchte euch hier einen kleinen Überblick und Tipps geben,
wie ihr einen sicheren Login hinbekommt.
Die wichtigsten Faktoren für einen sicheren Login:
1. Zwei-Faktor-Authentifizierung (Kurz: 2FA) - mittels SMS, Anruf oder App
Hierfür lohnt sich z.b. das Service von DuoSecurity
2. Captcha gegen Brute Force Attacken
Um ihren sicheren Login oder Registrations Prozessen gegen Bot's vorzubeugen, bietet sich das reCaptcha Plugin von Google an.
Hierfür wird eine Frage oder eine Zeichenfolge sichbar, die automatische Bot's nur schwer erkennen können, für den Menschen aber
einfach einzugeben sind. Teilweise wird sogar nur mehr ein Mausklick verlangt.
3. Zeitlicher IP-Ban gegen Brute Force Attacken nach mehreren fehlgeschlagenen versuchen
Wenn sich jemand 5 mal versucht mit falschen Login Daten anzumelden, dann wird die IP für mindestens 1 Stunde (oder je nach Wahl) im Script komplett gesperrt. Infos zur Implementierung mittels PHP gibts auch bei Codingsec.
4. Nur sichere PHP Sessions nutzen - sec_session_start() -> (siehe Codingsec)
5. Passwörter niemals unverschlüsselt übertragen, https benutzen.
Passwörter können bei normalen http Verbindungen mit einem passenden Network Sniffer abgefangen und dadurch missbraucht werden. Hierfür empfiehlt es sich dann einfach https anzuwenden. Google, Facebook und viele andere setzen aufgrund der Sicherheit, überhaupt nur mehr auf https Verbindungen und bieten keine normalen mehr an.
6. Passwörter niemals in klartext in der Datenbank speichern, mindestens 512bit, besser mit 1024bit verschlüsseln
Dies dient der allgemeinen Vorsorge. Sollte durch irgendeine Sicherheitslücke, Fehlkonfiguration oder Hack ein Datenbankzugriff ergeben, so haben die Angreiffer zumindest nicht die Möglichkeit die Passwörter einzusehen.
7. Passwörter "salzen" , mittels einer "salt value" ergänzen.
Wenn sich zum Beispiel der Benutzer "Rene" mit dem Passwort "Rene80" anmeldet, wird aus der Datenbank der Passwort-Hash und auch der Saltwert geladen. Dieser wird an das übermittelte Passwort versteckt angehängt und der Hash-Wert daraus berechnet, ohne das der Benutzer das mitbekommt. Angenommen der Saltwert wäre "$Ws)$3*y" , dann wird der Hashwert von "Rene80$Ws)$3*y" berechnet, und nicht lediglich von "Rene80". was weitaus unsicherer ist. Für die einbindung und weiteren Details verweis ich hier gerne auf den Blog von Helmbold
8. Login Status überprüfen
Um den Login status zu überprüfen für einen sicheren Login, checken Sie die variablen in den Sessions. Hierbei nutzten Sie auch die Browser informationen, ob diese sich auch nicht geändert haben. Da es sehr untypisch wäre inmitten einer Session den Browser zu wechseln. Dies schützt vor sogenannten "Session hijacking". (Nachzulesen bei Codingsec)
9. Login Status überprüfen via PHP_SELF
Unter Verwendung von der $_SERVER[‘PHP_SELF’] variable , lässt sich mit bestimmten Methoden checken ob die URL gültig ist. (Nachzulesen bei Codingsec)
10. Abmelden / Logout Script nicht vergessen
Das Logout script muss zuerst die Session starten und im Anschluss zerstören und dann auf irgendeine Startseite weiterleiten.
Hier wäre es angebracht eine CSRF Protection nicht zu vergessen. Denn für einen sicheren Login, sollte man auch für ein sicheres Logout sorgen. (Nachzulesen bei Codingsec)
Referenzen und Beispiele:
Wikipedia 2FA
Duosecurity Two factor authentication Provider
Codingsec - Login Tutorial
Helmbold Passwörter Sicher speichern
Captcha Plugin von Google