Sicherheit, Objekt serialisieren und in $_SESSION speichern

  • User loggt ein.
    UserDaten(inklusive seiner Rechte auf der Website) werden von Datenbank geladen.
    User wird serialisiert und serialisierte Daten in $_SESSION gespeichert


    stellt obige Vorgehensweise ein Sicherheitsrisiko dar?

    david

    I like Toast!

  • Bis hier her sehe ich noch kein Risiko. Es kommt darauf an, was Du dann damit machst. Die Frage ist auch, wieso Du die Daten serialisieren willst (=serialize() aufrufen), bevor Du sie in $_SESSION[] tust. Der andere Weg, Dinge in die Datenbank "hineinzuserialisieren" ist imho ebenfalls seltsam, weil Du Dich damit im Normalfall der Funktionen einer relationalen Datenbank beraubst.

  • naja solange der user eingeloggt ist wird dauernd auf das objekt User zugegriffen und damit ich es nicht bei jedem seitenaufruf neu erstellen muss, dachte ich beim ersten mal wird es erstellt und in einer session variable serialisiert abgespeichert und damit arbeite ich dann. nicht klug?

    david

    ps:

    pseudo code

    Code
    if (login(username, password) {
       $u = new User(username); //holt restliche daten von datenbank
       $_SESSION['SERIALIZED_USER'] = serialize($u);
    }

    oder so

    I like Toast!

  • naja, soweit ich mich erinnern kann, ist der serialize($u) -aufruf garnicht nötig.
    wenn du einfach das user-object in der session abspeicherst, sollte das von php auomatisch serialisiert werden.

    und.. naja, security-bedenken seh ich nur insofern, dass diese user-objekte dann beim default session handler unverschlüsselt auf der platte gespeichert werden. wenn also dein server in "feindlicher" hand ist, könnte das ein möglicher angriffspunkt sein.

    lg, chris

    hi, i'm a signature virus. copy me into your signature to help me spread.

  • Jo hab ich vor kurzem auch gelesen dass im Prinzip die Daten einer Session serialisiert abgelegt werden, hab ich aber zu dem Zeitpunkt des Schreibens noch nicht gewusst. :)

    david

    I like Toast!

  • nein nicht gut.
    speichere nur die userid in der session ab, das objekt solltest jedesmal neu erstellen. einfach deswegen weil wenn du die db änderst oder ähnliches, ist deine session im arsch und deine applikation wirds wahrscheinlich ordentlich abreissen ;)

  • wos? Macht wenig Sinn was du da sagst, aber momentan erstelle ich das Objekt eh jedesmal neu weil wenn ich das Objekt direkt in einer SESSION Variable speichere (also ohne serialize/unserialize) dann bekomm ich nen Fehler (Irgendwas mit INCOMPLETE OBJECT blabla) wenn ich eine Methode des Objekts aufrufe.

    david

    I like Toast!

  • ne, macht viel sinn.
    speicher die id

    $_SESSION['user_id'] = 10;

    und erstell dir daraus dein objekt

    $user = new User($_SESSION['user_id']);

    grund dafür ist ganz einfach:
    wenn du dein objekt/klasse veränderst, bekommst probleme.
    zb: du releast deine neue version. jeder user der bereits eine session hat, hat ab dem zeitpunkt wo du es hochlädst, probleme...

    nicht klar?

  • Naja das is schon klar aber dafür gibts doch elegantere Methoden, irgendein force reconstruct Dingens eingebaut aber das ist nicht so notwendig.

    Denk mir nur dass das doch Performance braucht wenn man dauernd das Objekt neu macht oder?

    Im Prinzip kann es mir wurscht sein funktionieren muss es =)

    Danke für den Input

    David

    I like Toast!

  • Zitat von davewood

    Naja das is schon klar aber dafür gibts doch elegantere Methoden, irgendein force reconstruct Dingens eingebaut aber das ist nicht so notwendig.
    Denk mir nur dass das doch Performance braucht wenn man dauernd das Objekt neu macht oder?
    Im Prinzip kann es mir wurscht sein funktionieren muss es =)
    Danke für den Input

    bitte was is ein force reconstruct dingens?

    um zu deiner anfangsfrage zurückzukommen:
    was machst wenn du die daten vom user änderst, während er eingeloggt ist?
    das stellt ein sicherheitsrisiko dar, denn du könntest ja den user nicht mehr sperren, solang er drinnen ist...

  • Na irgendwas halt dass die neu Erstellung der Objekte forciert. Klarerweise muss es auch zur Laufzeit gehen. Aber wie gesagt es ist nicht so kritisch und wenn was unvorhergesehenes passiert dreh ich den Usern den Server einfach ab :)

    david

    I like Toast!

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!