Michael: Sicherheitsfrage Sessionbasiertes Loginsystem

Hallo zusammen,

ich bin gerade dabei ein auf besondere Ansprüche zugeschnittenes CMS für meinen Verein basierend auf PHP / MySQL zu schreiben. Für die Authentifizierung im Admin-Bereich setze ich dieses Script hier ein:

http://aktuell.de.selfhtml.org/artikel/php/loginsystem/

Meine Frage: Ist dieses System zu knacken, also sollte man noch ergänzende Meachnismen einbauen?

Meine Idee wäre nach erfolgreichem Login eine zufällig generierte Zahlenfolge in die Datenbank und die Session zu schreiben und deren Übereinstimmung bei jedem Seitenaufruf in der auth.php überprüft wird.

Ist das übertrieben oder eine sinnvolle Ergänzung? Oder gibt es andere Angriffspunkte, wo man nachbessern sollte?

Viele Grüße,
Michael

  1. Hallo Michael,

    vorweg sei gesagt, dass ich nicht der "Sicherheits-Fachmann" bin. Ich würde aber trotzdem gerne einige Anmerkungen loswerden. ;-)

    ich bin gerade dabei ein auf besondere Ansprüche zugeschnittenes CMS für meinen Verein basierend auf PHP / MySQL zu schreiben. Für die Authentifizierung im Admin-Bereich setze ich dieses Script hier ein:

    http://aktuell.de.selfhtml.org/artikel/php/loginsystem/

    Meine Frage: Ist dieses System zu knacken, also sollte man noch ergänzende Meachnismen einbauen?

    Sie u.a.: Google: php session hijacking

    Meine Idee wäre nach erfolgreichem Login eine zufällig generierte Zahlenfolge in die Datenbank und die Session zu schreiben und deren Übereinstimmung bei jedem Seitenaufruf in der auth.php überprüft wird.

    Ist das übertrieben oder eine sinnvolle Ergänzung?

    Hmm ..., und was ist dabei dann der Unterschied zu der sowieso schon vorhandenen Session-ID?

    Oder gibt es andere Angriffspunkte, wo man nachbessern sollte?

    Kannst du https verwenden?
    Zusätzlich könntest du die HTTP-Authentifizierung nutzen (den im Artikel genannten Nachteil kann ich nicht so ganz nachvollziehen, schließlich nutze ich bspw. das Forum hier schon jahrelang auf diese Art & Weise).

    Gruß Gunther

    1. Hallo Gunther,

      Sie u.a.: Google: php session hijacking

      Danke für das Stichwort Session Hijacking. Ich habe mich nun einige Stunden mit dem Thema befasst, soweit ich das verstanden habe, klappt das übernehmen einer fremden SSID in dem von mir verlinkten Login Script nicht. Quelle: http://www.shopbetreiber-blog.de/2009/01/14/shop-risiken-falscher-umgang-mit-session-id/

      "1. Session-Hijacking

      Außer der Session-ID werden meist keine eindeutigen Parameter des Käufers gespeichert. Daher reicht einem vermeintlichen Angreifer die Kenntnis der Session-ID aus, um die Sitzung des Käufers trotz bestehender SSL-Verbindung zu übernehmen."

      Ich habe das Script bereits so angepasst, dass nach erfolgreicher Login-Prozedur Daten zum Account aus der Datenbank ausgelesen und in die Session geschrieben werden.

        
      $_SESSION["userid"] = $data["userid"];  
      $_SESSION["username"] = $data["username"];  
      $_SESSION["usertype"] = $data["usertype"];  
      
      

      Reicht das aus?

      Bezüglich Session Fixation habe ich dafür gesorgt, dass eine neue SSID jedesmal generiert wird, wenn sich ein User aus- bzw. einloggt.

      Meine Idee wäre nach erfolgreichem Login eine zufällig generierte Zahlenfolge in die Datenbank und die Session zu schreiben und deren Übereinstimmung bei jedem Seitenaufruf in der auth.php überprüft wird.

      Ist das übertrieben oder eine sinnvolle Ergänzung?

      Hmm ..., und was ist dabei dann der Unterschied zu der sowieso schon vorhandenen Session-ID?

      Ja ist auch wieder wahr...

      Kannst du https verwenden?

      Leider nicht.

      Zusätzlich könntest du die HTTP-Authentifizierung nutzen (den im Artikel genannten Nachteil kann ich nicht so ganz nachvollziehen, schließlich nutze ich bspw. das Forum hier schon jahrelang auf diese Art & Weise).

      Naja die fehlende Möglichkeit eines Logouts gefällt mir persönlich nicht, daher keine HTTP-Authentifizierung. Zusätzlich würde bedeuten, dass der User sich zunächst über das Webformulasr anmeldet und dann hinterher noch ein Eingabefenster für eine nochmalige Authentifizierung erscheint? Das erscheint mir umständlich... :-)

      Viele Grüße,
      Michael