Ankündigung

Einklappen
Keine Ankündigung bisher.

Session Hijacking

Einklappen

Neue Werbung 2019

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

  • Session Hijacking

    Moinsen,
    ich habe mir die letzten 2 Tage bisschen über Session Hijacking belesen. Nun möchte ich mein Projekt vor Hijacking schützen. Allerdings ist mir immer noch nicht ganz klar, wie das genau mit der Session nun abläuft.

    Ein User loggt sich ein, eine Session wird dadurch gestartet und der Client (Browser) bekommt eine eindeutige Session ID zugewiesen. Diese eindeutige Session ID kann ein Hacker aber ändern und kann somit eventuell volle Kontrolle über ein anderes Konto haben.


    Mein Projekt hat ein Session/Cookie basiertes Login. Sprich: Der User bekommt bei jeden Login eine eindeutige ID (Login-ID) zugewiesen, die nach überschreiten einer Zeitspanne gelöscht wird.

    Kann ich mein Projekt besser vor Hijacking schützen, wenn ich die Login-ID und die gehashte Email Adresse (mit Salt) mit der DB überprüfe?

  • #2
    Ne ^^

    Nur vom Session-ID kopieren ändert sich ja weder die ID noch die Mail. Session-Hijacking funktioniert so das der Angreifer die ID eben nicht ändert, sondern kopiert und dann behauptet "Ich hab die ID, ich bin der User".

    Du kannst ggf die IP und User Agent in der Session speichern (PHP?) und schauen ob die sich ändern, IPs ändern sich aber von Zeit zu Zeit (also nicht für Langzeitsessions geeignet) und Useragents lassen sich ohne Aufwand fälschen.

    Kommentar


    • #3
      Ah stimmt ja. Die Session ist ja auf dem Server. Hat also dann auch die Session von den eigentürmer wie zb die Login ID, richtig?

      Im grunde gibt es dann also kein richtigen Schutz vor sowas, oder liege ich wieder falsch?

      Kommentar


      • #4
        Vollständigen Schutz sowieso nicht. Du kannst aber ggf mit der IP und Useragent arbeiten, auch wenn das mehr "Falschalarme" auslösen wird.

        Ansonsten allgemeiner Schutz: HttpOnly-SID-Cookie sowieso, und ggf https verwenden.

        Kommentar


        • #5
          Also bräuchte ich nur https. (Was ja mittlerweile Standard bei sowas sein sollte)

          Useragent und IP, wie du sagtest, wollte ich eh nicht in meinen Projekt einbinden.

          Kommentar


          • #6
            HttpOnly auch. Im Allgemeinen kommst du nämlich auch ohne TLS/SSL aus, solange es nicht gerade ein Bankkonto ist xD

            Kommentar


            • #7
              Okay, dankeschön HttpOnly kann ich gut gebrauchen

              Kommentar


              • #8
                Auch solltest du nach erfolgreichem Login die Session ID einmal wechseln.
                Andernfalls kann man dem Server teilweise eine ID vorsetzen, in der er dann den erfolgreichen Login setzt. (Geht nur, wenn der Server auch den Get-Parameter als Session ID akzeptiert)
                [URL="http://php.net/manual/en/migration55.deprecated.php"]mysql ist veraltet[/URL] [URL="http://php-de.github.io/jumpto/mail-class/"]Mails senden: Ohne Probleme und ohne mail()[/URL]
                [PHP]echo 'PS: <b>Meine Antwort ist keine Lösung, sondern nur eine Hilfe zur Lösung.</b>';[/PHP]

                Kommentar


                • #9
                  Warum sollte ich nach erfolgreichen Login die Session ID wechseln?
                  Bei mir wird erst eine Session gestartet, wenn das Login erfolgreich war.

                  Kommentar


                  • #10
                    Zitat von Condor93 Beitrag anzeigen
                    Warum sollte ich nach erfolgreichen Login die Session ID wechseln?
                    Bei mir wird erst eine Session gestartet, wenn das Login erfolgreich war.
                    Da dir auf diesem Weg jemand den Login in einer bestimmten Session erzwingen kann, indem eine Phishing-Seite z.B. den folgenden Link auf deine Seite setzt:

                    www.example.com/login.php?ssid=e8f0a866af9e96b8

                    Damit weiß der Angreifer, dass falls der Login erfolgreich war, die Session die ID e8f0a866af9e96b8 hat und kann damit die Session übernehmen. (Hängt immer von der PHP Konfiguration ab, aber ein gutes System sollte kein spezielle Konfiguration benötigen, um sicher zu sein.)
                    [URL="http://php.net/manual/en/migration55.deprecated.php"]mysql ist veraltet[/URL] [URL="http://php-de.github.io/jumpto/mail-class/"]Mails senden: Ohne Probleme und ohne mail()[/URL]
                    [PHP]echo 'PS: <b>Meine Antwort ist keine Lösung, sondern nur eine Hilfe zur Lösung.</b>';[/PHP]

                    Kommentar


                    • #11
                      Ich verwende keine GET Parameter dafür.

                      Kommentar


                      • #12
                        Zitat von Condor93 Beitrag anzeigen
                        Ich verwende keine GET Parameter dafür.
                        Du nicht, je nach Serverkonfiguration akzeptiert PHP diese aber sehrwohl, falls kein Cookie gesetzt ist.

                        Da man sich wie gesagt nicht von einer Konfiguration abhängig machen sollte, würde ich das trotzdem noch einbauen. Vllt. laufen deine Skripte ja mal auf anderen Servern, mit anderen Einstellungen ....
                        [URL="http://php.net/manual/en/migration55.deprecated.php"]mysql ist veraltet[/URL] [URL="http://php-de.github.io/jumpto/mail-class/"]Mails senden: Ohne Probleme und ohne mail()[/URL]
                        [PHP]echo 'PS: <b>Meine Antwort ist keine Lösung, sondern nur eine Hilfe zur Lösung.</b>';[/PHP]

                        Kommentar


                        • #13
                          Ich glaube, du hast das Thema etwas verfehlt, Chris

                          Kommentar

                          Lädt...
                          X