[PHP] Login in Cookie speichern

Dieses Thema im Forum "Webentwicklung" wurde erstellt von GaYlORd, 12. Februar 2013 .

  1. 12. Februar 2013
    Login in Cookie speichern

    Hi Leute,

    hab eine Frage zur Sicherheit meines Login-Bereichs und wie man es sicherer/besser machen könnte.

    So hab ichs im Moment:


    Meiner Meinung nach ist es aber nicht so ganz sicher. Die Cookies können von dem Benutzer-PC geklaut/ausgelesen werden und selber benutzt werden. Kann ich das irgendwie verhindern? (Ohne auf die IP zu verweisen!)
    Die Benutzer speichern bei mir keine brisanten Dinge (wie Kontodaten). Dennoch möchte ich sie gerne schützen^^
    Ist so ein Cookieklau "mein" Problem oder hat sich der Benutzer davor zu schützen?

    Wie sichert ihr euren internen Bereich ab?

    Danke schonmal!

    Gruß
    gl
     
  2. 12. Februar 2013
    AW: Login in Cookie speichern

    Die E-Mail oder das Passwort ( auch in gehashter Form ) bei jedem Aufruf per Cookie mitzusenden halt eich persönlich für keine gute Idee. Diese können leicht im Netzwerkverkehr mitgeschnitten werden.
    Eine einfacher Session-Hash bietet zmd. nicht die Möglichkeit, direkt an den Passwiort(-Hash) oder die E-Mail Adresse zu gelanden. Ist also schonmal besser.

    Um nun auch das Stehlen der Session zu verhindern, muss zwangsläufig eine Identifizierung des Gegeübers stattfinden. Was spricht dagegen, dafür die IP zu verwenden? Ansonsten könnte man auch den UserAgent dazu heranziehen.
    Eine Validierung der Session findet dann immer über die Kombination Session-Hash und IP/UA-Hash statt.

    Grüße
     
    1 Person gefällt das.
  3. 12. Februar 2013
    AW: Login in Cookie speichern

    Hmm, Nachteil der Sessions ist halt, dass sich der Nutzer jedes mal neue anmelden muss, wenn er den Browser schließt. Die IP wollte ich nicht verwenden, da sich diese ja öfters ändern und dann zusammen mit den Cookies nicht mehr funktionieren würde.

    Verwende ich keine Cookies mehr, kann ich das natürlich so machen, da sich der Nutzer bei jedem Besuch sowieso neu anmelden muss.

    Z.b. das Forum hier macht es ja genauso mit den Cookies wie ich. Es wird in rruserid die ID gespeichert und in rrpassword der Passworthash. Ist das Forum also auch nicht gegen den Cookie-Klau oder das Mitschneiden geschützt?

    Gruß
    gl
     
  4. 12. Februar 2013
    AW: Login in Cookie speichern

    myth2806 redet nicht von einer klassischen Session, sondern von einem eigenen Session Management System via Cookie. Solange du dich via Cookie authentifizieren kannst, gibt es meines Wissens nach keine Möglichkeit Identitätsdiebstahl via "Cookie-Klau" zu verhindern ohne die IP heran zu ziehen. User Agent und Co. kann man problemlos ändern.
     
    1 Person gefällt das.
  5. 13. Februar 2013
    Zuletzt bearbeitet: 13. Februar 2013
    AW: Login in Cookie speichern

    Es gäbe noch die Möglichkeit "HttpOnly".
    Dadurch kann, solange der User einen akuellen Browser benutzt, der Cookie nicht ausgelesen werden (via Script z.B. XSS-Lücke).

    Ich würde es, wie vBulletin auch, so löse, dass der User und das Passwort (verschlüsselt) in einem Cookie gespeichert werden.
    Ist dann deine Seite soweit "sicher" (kein XSS, SQLi, etc.) ist es schwer an die Daten zu kommen.

    Sollten die Cookies ausgelesen werden, müsste der Angreifer noch den Hash dekodieren.
    Mit einem passendem Salt sollte dies auch eine Zeit in anspruch nehmen.

    Natürlich kannst du, nicht direkt, den Nutzer schützen.
    Es ist ja sein "Problem" ob er auf den Link in der Phishing E-Mail klickt oder sonstige Viren/RAT's installiert bekommen hat, weil er unvorsichtig ist.

    PS: du kannst dir auch eine eigene Verschlüsselung ausdenken.
    z.B. Zeichen verdrehen/ersetzen, so dass das richtige Passwort nicht (gehasht) im Cookie sitzt, sondern das Passwort mit verdrehten/ersetzen Zeichen.
     
    1 Person gefällt das.
  6. 13. Februar 2013
    AW: Login in Cookie speichern

    Erstmal vielen Dank für eure Antworten!!

    So hab ichs jetzt überlegt:
    Beim Login wird in die DB die userid mit der session_id gespeichert. Die Userid,Passwort und Email werden mit einer Verschlüsselungen von mir in COOKIES gespeichert (mittels HttpOnly auf TRUE und Secure auf TRUE -> nur SSL-Verbindungen sind möglich).
    Sobald der eingeloggte Nutzer dann eine Seite aufruft, wird die Session aus dem Browser mit der Session aus der DB verglichen, nachdem login&passwort überprüft wurden. Sind die Sessions identisch, wird der session-wert in der DB mit "session_regenerate_id()" überschrieben -> Es wird bei jedem Seitenaufruf eine neue Session generiert.
    Klaut jemand die Cookies ist der Session-Wert in dem Cookie vom Dieb nicht mehr aktuell & stimmt nicht mit dem Wert in der DB überein und ist somit ungültig -> der Dieb wird rausgeschmissen.

    So sollte die Absicherung besser sein, oder?

    Gruß
    gl
     
  7. 14. Februar 2013
    Zuletzt bearbeitet: 14. Februar 2013
    AW: Login in Cookie speichern

    Ich handhabe das derzeit so:
    (Session-Verwaltung findet komplett in der Datenbank statt -> wie geht das?)

    Code:
    COOKIE = base64( {user_id} ';' magic( {passwort + salt kombination} ) )
    *magic: Eine eigene Kaskade aus Hash-Funktionen (160/256 bit).

    Zusätzlich überprüfe ich noch den UserAgent.
    IP hab ich bewusst raus gelassen.

    Deine Methode gefällt mir aber besser, werde das wohl demnächst auch so umsetzen
    Vor allem die E-Mail mit in den Token zu schmeißen finde ich eine sehr gute Idee!
    (Hätte mir selbst schon früher einfallen müssen )
     
  8. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.