PHP User verifizieren?
Hi, ich bin grad dabei ne Website für ein kleines Startup zu programmieren und hänge grad am Login System. Ich hab dabei kein wirkliches Problem sondern eher ne allgemeine Frage:
Wie kann man sicher und sinnvoll einen User verifizieren
Momentan mache ich das so:
Ein User registriert sich, woraufhin in der Datenbank für diesen User ein einzigartiger "Verifizierungscode" generiert wird. Dieser wird dann, wenn er sich einloggt, auf dem PC des Users per Cookie gespeichert. Wenn der User jetzt auf sein Dashboard zugreifen will, wird einfach, wenn vorhanden, der Inhalt des Cookies mit allen Verifizierungscodes in der Datenbank abgeglichen und bei der Zeile, in der die Codes übereinstimmen, wird daraus dann der User geladen. Hoffe das ist verständlich, ansonsten einfach nachfragen.
Den Inhalt des Cookies kann man auch nicht durch irgendwelches rumprobieren herausfinden, da ich diesen mit password_hash() gehashed habe.
Mein Problem jetzt: Ich habe mir einige Docs und Sicherheitsberichte durchgelesen in denen häufig gesagt wird, man solle den User nicht nur anhand eines Cookies automatisch einloggen. Nur leider wird nirgends erwähnt, was man sonst noch so machen könnte, da die Gefahr, dass der Cookie geklaut wird oder ähnliches ja schon besteht. (Cookie Hijacking).
Hat jemand ne sinnvolle Antwort auf mein Problem oder andere Lösungsvorschläge?
ich habe auch schon gedacht, dass ich einfach die IP speichere, diese ändert sich ja aber andauernd, macht also auch keinen Sinn :(
2 Antworten
Ich denke, was die "großen" Anbieter (Amazon, Google, Facebook und Co) machen, sind heuristische Methoden. Es werden "Auffälligkeiten" erkannt, etwa anderer Browser als üblich, IP-Adresse von anderem Anbieter/aus anderem Land, Betriebssystem, etc...
Gerade wenn es ein gespeichertes Cookie ist, sollten sich ja nicht plötzlich Browser, etc... ändern. Ansonsten hilft, denke ich, nur in regelmäßigen Abständen oder für Kontofunktionen (Passwort-Einstellungen...) zwingende Neuanmeldung. Am Besten noch mit Zweifaktorauthentifizierung.
Ok danke! Zweifaktorauth. werd ich auf jeden Fall noch einbauen :).
Ich mach das bei meinen Projekten immer mit Sessions auf dem Server und speichere darin dann die Werte und auch den Login immer ein paar Stunden/Tage, damit ich nicht bei jedem Seiten aufruf eine Datenbank abfrage erzeugen muss, ist aber glaube ich/finde ich auch nicht die beste Lösung.
Doch das kann man so machen mit den Sessions auf Serverseite.