Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Was ist der richtige und sichere Weg, um einen Benutzer angemeldet zu halten? Kekse? Sitzung? PHP &&MYSQL

Lassen Sie mich Ihnen zunächst Folgendes sagen. Nichts ist 100% sicher. Nichts ist luftdicht und nichts ist heilig. Wenn ein Angreifer motiviert genug ist, durchbricht er jeden serverseitigen Schutz, den Sie möglicherweise einsetzen (es sei denn, Sie verwenden HTTPS, was eine andere Geschichte ist).

Sie können Cookies verwenden, aber Cookies sind stark exponiert und leicht zu ändern. Speichern Sie niemals private Daten oder Zugriffsebenen in einem Cookie. Da es von einem Angreifer leicht gestohlen/modifiziert werden kann.

Sitzungen sind auch nicht 100% sicher. Die Sitzungs-ID, die der Server verwendet, um den Client zu identifizieren, wird auf einem von zwei Wegen gesendet. eine $_GET-Variable (schlecht) oder ein Cookie (besser, aber immer noch ziemlich schlecht). Das heißt, wenn Sie als Administrator über ein ungesichertes WLAN angemeldet sind, kann ein geschickter Angreifer (und mit geschickt meine ich einen pr0 haxx0r, der einen einfachen HTTP-Sniffer heruntergeladen hat) Ihre SESSION-ID leicht stehlen. Und ohne Ihr Passwort zu erhalten, identifiziert der Server den Angreifer fälschlicherweise als Sie und gewährt ihm jeden Zugriff, den Sie möglicherweise haben/hatten.

Was also tun? Sitzungen sind in den meisten Fällen sicher. Weisen Sie Ihre Benutzer darauf hin, sich nicht in einem ungesicherten Netzwerk (Busse, Internetcafés usw.) anzumelden. Wenn Sie Ihre Benutzerberechtigung über einen längeren Zeitraum bestehen lassen möchten, ist ein Cookie erforderlich. Normalerweise verwende ich ein 2-Cookie-System, wenn ich das brauche:

userid=12345
hash=password_hash($userid . $hashed_password, PASSWORD_DEFAULT)

Dann habe ich etwas zum Abgleichen, und die Details des Benutzers wurden nicht preisgegeben.

Aber wie ich schon sagte, am Ende des Tages, wenn Sie Ihre Benutzer wirklich WIRKLICH sichern wollten, besorgen Sie sich HTTPS.