Session Daten verschlüsseln.

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Session Daten verschlüsseln.

    Werte Boardgemeinde.

    Ich habe mich schon durch das Archiv des Forums gewühlt und leider nichts gefunden.

    Folgendes Problem.

    Ich habe ein PHP Programm in dem ich aus Sicherheitsgründen niemanden zwingen will meine MySQL Datenbank zu verwenden. Jeder kann unter Settings seine eigenen Verbindungsdetails angeben.

    Sicherere Session
    Jetzt möchte ich beim ersten LogIn des Users seine SQL Datenbankdaten abfragen und diese in einer SESSION speichern.
    Das hat IMHO den Vorteil, dass ich nicht auf jeder Seite die er aufruft in meiner Datenbank nachsehen muss wie seine Verbindungsdaten sind um dann zu seiner DB zu verbinden.

    Deshalb Connection-Daten in die Session und von da dann immer abrufen.

    Jetzt gilt Session ja nicht als 100% sicher. Deshalb möchte ich so was haben wie ein MD5() aber auf beide Seiten verwendbar.

    Sprich beim LogIn speicher ich die Verbindungsdaten in die Session $session_server = verschlüsselung($wert,'passwort') verschlüsselt.

    Wenn ich die Daten wieder benötige mach ich $verbindung = entschlüsseln($session_server, 'passwort').

    Das müsste das Übergeben meiner Daten an die Session sicherer machen. Stimmt das oder bin ich auf einem Holzweg.


    Verschlüsselungsverfahren gesucht
    Weiters suche ich genau so eine Funktion verschlüsseln aber nicht etwas das mir den ganzen Server bremst. Ich brauch hier kein Blowfish verfahren etwas einfaches Performance schonendes. Hat jemand eine Idee die im Standard Lieferumfang von PHP enthalten ist?

    thanks for help.

    Teutatis.

  • #2
    schon mal crypt() in den string functions des php manuals nachgeschaut inklusive "see_also"

    Kommentar


    • #3
      Also wenn dein Skript das Entschlüsseln kann, wie macht es dann die Session sicherer?
      Du solltest lieber dafür sorgen, dass du die Session explizit an einen User binden kannst, mit anderen Worten trans_id ausschalten, use_only_cookies anschalten, einen session-handler schreiben, der IP und UserAgent bei jedem Start mit dem Wert in der Datenbank vergleicht und nur dann die session wirklich startet, ggf. die Session in der Datenbank speichern wenn du auf einem Shared Host Angst hast, dass ein anderer Account das Session-File lesen könnte.

      Einen verschlüsselten Wert, zudem noch mit einer performanten, somit wahrscheinlich schlechten, Verschlüsselung, in der Session zu speichern, finde ich eher schlecht als recht :/

      Ein netter Guide zum übersichtlichen Schreiben von PHP/MySQL-Code!

      bei Klammersetzung bevorzuge ich jedoch die JavaCoding-Standards
      Wie man Fragen richtig stellt

      Kommentar


      • #4
        Naja
        verschlüsselte Daten im sessionfile sind ein Vorteil. Und vermutlich sucht Frager diesen. Die anderen Risiken sind orthogonal - auch immer vorhanden.
        Zuletzt geändert von mäander_; 11.07.2006, 12:27.

        Kommentar


        • #5
          Re: Session Daten verschlüsseln.

          Original geschrieben von teutatis
          Das hat IMHO den Vorteil, dass ich nicht auf jeder Seite die er aufruft in meiner Datenbank nachsehen muss wie seine Verbindungsdaten sind um dann zu seiner DB zu verbinden.
          Ich denke zusätzlich zu obigem, dass das eine Fehlüberlegung ist. Ein Datenbankaufruf mehr oder weniger..darauf kann es nicht ankommen, vielleicht sogar kombiniert mit dem anyway gemachten logging und was sonst noch anfällt. Dazu noch anstatt einer sessionfileoperation weniger oder mehr....

          Kommentar


          • #6
            Original geschrieben von mäander_
            Naja
            verschlüsselte Daten im sessionfile sind ein Vorteil. Und vermutlich sucht Frager diesen. Die anderen Risiken sind orthogonal - auch immer vorhanden.
            was für ein Vorteil???
            was kann man damit überhaupt erreichen?
            wenn jemand ein zugang per ftp zu deinen sessiondaten geschaft hat, dann bringt dir auch verschlüsselung nichts.
            Slava
            bituniverse.com

            Kommentar


            • #7
              Original geschrieben von Slava
              was für ein Vorteil???
              Gerade ein hochsicherheitsding ist es nicht. Wer Zugang hat der hat ihn. Es gibt Sicherheitssysteme mit 6 Schlüsseln und wer alle hat, kommt rein. Aber man muss sie haben. Geht das Sicherheitssystem mit 0 Schlüsseln, ist es viel einfacher.

              ZB siehst Du in einer debugging Situation das sessionfile, aber den Inhalt nicht dh nur wirres hex zeug. Du kannst einen backup ziehen, ohne die sessiondaten auszuschliessen. Dein provider kann aus irgendwelchen legitimen Gründen mit den sessionfiles was machen, der Inhalt ist versiegelt. Die Polizei kann den server beschlagnahmen....und mit forensic software die Daten absuchen..gibt zuerst mal nichts, oder gibt schon was...

              Kommentar


              • #8
                tut mir Leid, aber ich kann das nicht nachvollziehen.
                1)normale Lebensdauer von einem session ist etwa 15 minuten nach der letzter Aktion.
                2)die session daten sind nur für die php scripts relevant und stehen dem zugeordnetetm user nicht zur Verfügung
                3) einzelne zusammenhang zwischen dem User und seinen Session-daten ist session_id,
                also technisch gesehen, wenn jemand sich mit einer fremder, noch existierender session_id meldet, dann können wir den user nicht mehr von dem richtigem unterscheiden, und unsere scripts werden die gleiche ergebnise liefern ohne rücksicht ob die sessiondaten verschlüsselt sind.

                als zusammenfassung kann ich also sagen,
                1)an unsere session-daten kommt nur derjeniger, der ftp-Zugang hat.
                2)unsere scripts können nur durch sessions_id die zugehörige daten und nur für interne script-logik benutzt werden.
                ------------------
                <<Die Polizei kann den server beschlagnahmen....und mit forensic software die Daten absuchen..gibt zuerst mal nichts, oder gibt schon was...>>
                1)muss es überhaupt so weit kommen?
                2) und wenn es so weit kommt, dann ist es nur die frage von zeit, bis die Inhalte (von aktuelen sessiondaten) entschlüsselt werden(wenn du das selber nicht verraten hast).
                oder meinst du, dass bei Polizei nur die Dilletanten und anfänger arbeiten?
                Slava
                bituniverse.com

                Kommentar


                • #9
                  Werte Boardgemeinde.

                  Erstmal Danke für Eure zahlreichen Antworten.

                  Also mein Probleme sehe ich jetzt darin, dass ich einfach nicht wirklich gebildet bin in dem Thema und ich von „hören sagen“ lebe und von den Dingen die man sich so aus den OReilly Büchern zusammengesucht hat.

                  Meine bisherige Annahme war, dass die Chance zwar sehr gering ist, aber es Möglichkeiten gibt hinter die Informationen die in der Session übermittelt werden zu kommen, wenn man im Netzwerk zwischen dem User und unserem Server sitzt. Irgendwas von die ersten 10 Nanosekunden ist die Session unsicher und wenn da irgendein Bufferüberlauf oder so ist, dann kann man hinter die Daten kommen, aber das ist so wie ich das euren Postings entnehme eher ein fall für die Mythbusters.

                  Aber noch mal kurz weiter ausgeholt.

                  Der Server ist ein Root Server, steht physisch unter meinem Schreibtisch also kein VHost mit 1000 anderen.

                  Ich hoffe, wie wohl jeder der irgend was in PHP für andere macht, dass meine Anwendung auch wenn sie kostenlos ist, *hoffentlich* irgendwann von 1000enden von Usern genützt wird. Deshalb hab ich mir überlegt, anstelle immer wieder in der Hauptuser DB nachzufragen, was die Connection-Details sind ist es einfacher für mich das in die Session zu stecken und von dort wieder abzuholen. Weniger mysql_queries die ja hoffentlich mal voll ausgenutzt werden

                  Natürlich versuche ich die Session durch ID prüfen, IP prüfen, Ablaufzeit usw möglichst sicher zu mache. Ich wollte einfach nur verhindern, dass Jemand der vielleicht beim Benutzer in der Leitung lauscht hinter dessen Datenbankinformationen kommt. Ein weiterer Sicherheitsaspekt ist dann noch, dass er seine DB so konfiguriert, dass nur unsere IP Adresse drauf zu greifen kann.


                  Gestern hab ich dann was gefunden, was ungefähr dem entsprich und das ich jetzt, auch wenn es vielleicht „dumm“ ist einbaue. base64_decode und base64_encode. Hier wird nicht mal ein Passwort vergeben, der String wird einfach verschlüsselt und wenn man weiß wie es gemacht ist, ist das ein Kinderspiel es wieder zu entschlüsseln aber wenn man nicht weiß was es ist und folgende Zeichenkette sieht: ±êi†‰ì, sollte es einen Angreifer zumindest mal verwirren

                  Mein weiteres Vorgehen wird sein, dass ich mich mit der Session wirklich näher beschäftige und einschlägige Literatur zu Rate ziehe.


                  Auf alle Fälle danke an Alle für eure Mühe.

                  Kommentar


                  • #10
                    Original geschrieben von teutatis
                    Gestern hab ich dann was gefunden, was ungefähr dem entsprich und das ich jetzt, auch wenn es vielleicht „dumm“ ist einbaue. base64_decode und base64_encode. Hier wird nicht mal ein Passwort vergeben, der String wird einfach verschlüsselt und wenn man weiß wie es gemacht ist, ist das ein Kinderspiel es wieder zu entschlüsseln aber wenn man nicht weiß was es ist und folgende Zeichenkette sieht: ±êi†‰ì, sollte es einen Angreifer zumindest mal verwirren
                    Ach komm, so'n Käse kannste dir wirklich sparen.

                    Base64 dürfte jeder, der dieses Verfahren nicht erst gestern entdeckt hat, gleich vermuten, wenn er die Daten sieht.

                    Diese "Kodierung" (Verschlüsselung kann man das nun wirklich nicht nennen, es ist schlicht und einfach ein Verfahren, 8-Bit-Binärdaten auf eine kleinere Menge gebräuchlicher Text-Characters abzubilden) wird bspw. auch für Dateianhänge in Emails etc. benutzt.
                    I don't believe in rebirth. Actually, I never did in my whole lives.

                    Kommentar


                    • #11
                      Ich würde von base64 auch abraten, sondern crypt() verwenden (oder einen eigenen shiftregisteralgorithmus), damit man nicht aus den sessiondaten allein schon den inhalt bekommt, sondern mindestens ein zweites Element braucht.

                      Und noch mehr würde ich mir den sessionzauber dafür überhaupt ersparen, weil spätestens wenn es in der unnötigen Komplexität einen Programmierfehler oder was auch immer gibt hat es sich nicht gerechnet. Der Frager weiss auch noch nicht einmal (*), wo die Engpässe in seiner Applikation sein werden.

                      So würde ich das gesehen haben

                      (*) zugegebenermassen als Schätzung.
                      Zuletzt geändert von mäander_; 12.07.2006, 11:12.

                      Kommentar


                      • #12
                        <<
                        Natürlich versuche ich die Session durch ID prüfen, IP prüfen, Ablaufzeit usw möglichst sicher zu mache. Ich wollte einfach nur verhindern, dass Jemand der vielleicht beim Benutzer in der Leitung lauscht hinter dessen Datenbankinformationen kommt. Ein weiterer Sicherheitsaspekt ist dann noch, dass er seine DB so konfiguriert, dass nur unsere IP Adresse drauf zu greifen kann.
                        >>
                        egal, ob es um ein locale netzwerk, oder internet handelt, ich habe von keiner deiner Aussage der Sinn für Sessiondaten-verschlüsselung gefunden.

                        deshalb sehe ich auch kein Sinn über die Verschlüsselungverfahren zu sprechen, besonders über base64

                        Also nenne mir wenigsten 1 Grund, warum sessions-daten verschlüsselt sein müssen!
                        mit einem realistischen Beispiel bitte!
                        Slava
                        bituniverse.com

                        Kommentar


                        • #13
                          Original geschrieben von wahsaga
                          Ach komm, so'n Käse kannste dir wirklich sparen.

                          Base64 dürfte jeder, der dieses Verfahren nicht erst gestern entdeckt hat, gleich vermuten, wenn er die Daten sieht.

                          Diese "Kodierung" (Verschlüsselung kann man das nun wirklich nicht nennen, es ist schlicht und einfach ein Verfahren, 8-Bit-Binärdaten auf eine kleinere Menge gebräuchlicher Text-Characters abzubilden) wird bspw. auch für Dateianhänge in Emails etc. benutzt.
                          Nun ja wenn ich den String vorher gesehen hätte, ich hätte es nicht gewusst, aber Du hast recht, so überlegt jemand der die Session hacken kann weiß auch was dieser String bedeutet.

                          Kommentar


                          • #14
                            Man sieht es schon an den = Zeichen am Schluss.

                            Kommentar


                            • #15
                              Original geschrieben von mäander_
                              Man sieht es schon an den = Zeichen am Schluss.
                              nicht immer
                              wenn die daten sich durch 6 bit ohne den Rest teilen lassen, dann gibt es kein "="
                              am ende.
                              Slava
                              bituniverse.com

                              Kommentar

                              Lädt...
                              X