CGI C++ Session



  • Original erstellt von Loggy:
    [Da ist kein Unterschied außer in der Lebendsdauer des Cookies. Das Problem ist aber das gleiche.

    Eigentlich schon da dieses nicht auf der Platte gespeichert wird und somit auch nach dem schließen nicht verwendet werden kann und eigentlich nicht ausgelesen werden kann.



  • Wer sagt, dass es nicht auf der Festplatte gespeichert wird? Das ist eine Annahme, die zutreffen kann, aber nicht muss. Außerdem ist es völlig irrelevant, denn du hast recht, wenn du kein vernünftiges Datum zur Löschung des Cookies angibst, wird dieses nur so lange zum Server gesendet, wie die aktuelle Session aktiv ist (wie das intern geregelt wird ist unterschiedlich und nicht von belang).



  • Warum ist das so wichtig, ob ein Cookie in ner Datei landet oder ob es im Speicher verbleibt? Da es als ganz normaler Header gesendet wird, kann man es sowohl abfangen, als auch emulieren...

    Fazit: Kekse sind NICHT sicher!

    Gruß Jens



  • Klar kannst alles Abfangen.
    Wenn du keine Zeit setzt dann existier das Cookie nur temporär und ist beim schließen des Browsers nicht mehr da. Somit kann es nicht ausgelesen werden.
    Wie willst du aber sonst einen User identifizieren?
    HTTP ist verbindungsloses Protokoll.



  • Es sagt ja niemand, dass du keine Session-ID (zur Not auch eine User-ID - muss dann aber sicher sein nicht einfach nur 1, 2, 3, ... sondern vielleicht ein md5)! Du solltest aber eben nicht irgendwelche Werte direkt im Cookie speichern, da sie verhältnismäßig einfach manipulierbar sind, sondern nur eine dieser IDs 🙂



  • Ich speicher nur die userid um aus der DB dann immer die restlichen Daten bei der nächsten Seite zu bekommen.
    Das wollte ich mir aber ersparen da bei jedem aufruf ein Zugriff auf die DB erfolgen muss.
    Wie macht das eigentlich PHP mit den Sessionvariablen.
    Haben die da einen eigenen Server oder ließt er sie jedesmal aus einer Tempdatei?



  • Ich speicher nur die userid um aus der DB dann immer die restlichen Daten bei der nächsten Seite zu bekommen.

    Warum speicherst du dann nicht eine Session-ID 😕

    Das wollte ich mir aber ersparen da bei jedem aufruf ein Zugriff auf die DB erfolgen muss.
    Wie macht das eigentlich PHP mit den Sessionvariablen.
    Haben die da einen eigenen Server oder ließt er sie jedesmal aus einer Tempdatei?

    Imho werden die jedesmal neu gelesen 🙄



  • Session_ID müsste ich erst generieren und den Source will ich mir ersparen oder hast du einen für mich.
    😉



  • Für C++ nicht, aber mit PHP kannst du es z.B. folgendermaßen machen:

    $sess_id = md5(uniqid(rand()));
    

  • Mod

    Original erstellt von Unix-Tom:
    Session_ID müsste ich erst generieren und den Source will ich mir ersparen oder hast du einen für mich.
    😉

    du brauchst eine Session ID - zumindest wenn du nicht willst, dass sich jemand als Admin oder ähnliches ausgibt.

    Bei meiner CGI Library mach ich es so:

    Ich habe eine Ordner Session (worauf nur mein Script zugriff hat)
    in diesem Ordner liegen 2 dateien:
    session
    session_lock

    jedes script dass eine Session braucht lockt mal session_lock (solange session_lock gelockt ist, kann kein anderes script mit den sessions rumspielen)
    dann liest es alle daten aus session aus -> die form der daten ist folgendermaßen:

    session_id time_stamp
    wobei das script dann alle sessions löscht wo der timestamp älter als X ist.

    die session_id wird wie folgt verwendet:
    es gibt einen unterordner session_dats
    hier gibt es für jede session eine datei die genauso wie die session_id heißt - da stehen alle session daten drinnen.

    session id generiert sich dann so:
    md5(timestamp + laufzeit) (uU kommt noch ein xor IP dazu - da bin ich mir noch nicht sicher)
    dann wird geschaut ob die session_id schon existiert (es stehen ja alle session ids in der session datei drinnen)
    wenn sie schon vorhanden ist, dann wird die id halt nochmal generiert (da sich ja laufzeit verändert hat)

    als sicherung speicher ich zusätzlich noch die IP vom user in der session - wenn der User zwar die richtige session_id hat, aber die falsche IP dann bekommt er die session trotzdem nicht.

    falls du denkst, dass das alles overengineering ist, dann bedenke folgendes:
    es gibt genug Leute denen fad ist. Und es gibt nix einfacheres als cookies zu manipulieren - eine session ID zu raten ist sicher lustig.

    Sollte deine Lösung aber nur fürs (Firmeninterne) Intranet sein - dann reicht das mit dem Cookie natürlich auch - denn diese ganzen Sicherungen macht man quasi nur für Leuten denen fad ist... (die haben dann meistens nichtmal böse absichten - aber wenn sie dann die sensiblen daten haben, dann ist es ja egal ob sie sie mit vorsatz oder nicht bekamen...)



  • Original erstellt von Shade Of Mine:
    **
    Bei meiner CGI Library mach ich es so...
    **

    Kann man die schon sehen? Ich bin grade auf der Suche nach einer C++-CGI-Lib und habe noch nichts passendes gefunden...

    Danke!

    Peanut


  • Mod

    Original erstellt von Peanut:
    **Kann man die schon sehen? Ich bin grade auf der Suche nach einer C++-CGI-Lib und habe noch nichts passendes gefunden...
    **

    die ist noch viel zu unstable
    und ich habe kaum zeit sie weiterzuentwickeln

    aber schau dir mal
    CGI++
    CGICC
    CGIXX

    an - die sind recht gut (aber AFAIK gibts keine Lib die Sessions kann)



  • ich wärm das thema ja ungern auf, aber muss man überhaupt daten beim clienten speichern?
    Man kann doch auch gewisse daten des clienten nutzen um einen fingerabdruck zu erstellen und dann anhand dessen die session zu laden
    als daten könnte man z.b. ip, browser, ident, etc. nehmen um so einen fingerabdruck zu generieren


Anmelden zum Antworten