wucher wichtel: Loginsystem sicher?

Hallo!

Ich habe eine Frage bezüglich eines Loginsystems: Ich habe mir (zu Lernzwecken) ein Loginsystem geschrieben. Ich wollte von euch nun wissen, ob es sicher ist, oder nicht. Alle Daten werden maskiert. Also das ganze läuft so ab:

Der User gibt seinen Namen und das Passwort ein. Das Formular leitet diese Informationen an eine andere PHP-Datei weiter. Diese Datei wandelt das Passwort in einen MD5-Hash um und fragt den Hash in einer Datenbank ab. Wenn das Passwort stimmt, dann wird in einer Session der Username und die IP-Adresse gespeichert. Dann wird per header auf die nächste PHP-Datei weitergeleitet. Dort wird dann wieder überprüft, ob die IP-Adresse in der Session, mit der aktuellen IP-Adresse übereinstimmt. Das soll verhindern, dass die Session, die in einem Cookie gespeichert wird, weitergegeben und dann benützt werden kann. Wenn alles ok ist, dann wird die Seite angezeigt. Wenn nicht, dann wird abgebrochen.

Meine Frage: Ist dieses Vorgehen sicher, oder gibt es einen Grund zum Meckern? :) Mir geht es jetzt vorallem um das Prinzip. Weniger um den Code an sich.

Danke schön!

ciao, ww

--
Ein japanisch-deutsches Gedicht
sh:(  fo:|  ch:~  rl:(  br:>  n4:~  ie:%  mo:)  va:)  de:]  zu:)  fl:(  ss:|  ls:~  js:)
  1. Du könntest statt md5() sha1() nehmen. Es gibt nämlich Leute, die kurz davorstehen, MD5-Hashs wieder entschlüsseln zu können.
    Mit einigen Proxys kann man auch die IP verändern, weshalb du beim Seitenwechsel vielleicht auch nochmal das Passwort überprüfen könntest.

    1. Hallo!

      Du könntest statt md5() sha1() nehmen. Es gibt nämlich Leute, die kurz davorstehen, MD5-Hashs wieder entschlüsseln zu können.

      Ok, wenn das sicherer ist, dann baue ich das noch um.

      Mit einigen Proxys kann man auch die IP verändern, weshalb du beim Seitenwechsel vielleicht auch nochmal das Passwort überprüfen könntest.

      Stimmt. Das mach ich auch noch :) Danke!

      ciao, ww

      --
      Ein japanisch-deutsches Gedicht
      sh:(  fo:|  ch:~  rl:(  br:>  n4:~  ie:%  mo:)  va:)  de:]  zu:)  fl:(  ss:|  ls:~  js:)
    2. Tach.

      Es gibt nämlich Leute, die kurz davorstehen, MD5-Hashs wieder entschlüsseln zu können.

      Hast du dazu Quellen?

      Sicher meinst du nicht "entschlüsseln", denn das ist mathematisch in den allermeisten Fällen gar nicht möglich. Wahrscheinlicher ist es, eine Kollision zu finden, d. h. einen Input, der den gleichen Hash liefert wie ein anderer (nicht notwendigerweise bekannter) Input. Die Hashverfahren sind nicht einfach umkehrbar – daher sind auch Bezeichnungen wie "verschlüsseln" und "entschlüsseln" in diesem Zusammenhang irreführend.

      Falls du Programme wie md5crack meinst ... Die "entschlüsseln" nichts, sondern sind einfach optimierte Brute-Forcer, die sich z. B. zunutze machen, daß Paßwörter einer bestimmten Länge gewisse Teile in der Hashroutine vorhersehbar machen. Daduch kann der Brute-Forcer die Hashberechnung seinerseits etwas abkürzen und im Endeffekt schneller alle Buchstabenkombinationen durchprobieren.

      Ansonsten gibt's natürlich noch Dictionary Attacks, die auf schwache Paßwörter abzielen – mit dem Algorithmus (MD5, DES, SHA, RIPEMD, ...) hat das erstmal nichts zu tun. Und auch nicht mit "entschlüsseln".

      Wenn du schon an dieser Stelle inm Loginsystem Verbesserungen vorschlagen möchtest, wäre in meinen Augen die Verwendung von Salts ein guter Tip.

      --
      Once is a mistake, twice is jazz.
  2. Hallo ww,

    Meine Frage: Ist dieses Vorgehen sicher, oder gibt es einen Grund zum Meckern? :) Mir geht es jetzt vorallem um das Prinzip. Weniger um den Code an sich.

    Im Prinzip ist dein Prinzip gut.
    Jedoch werden AOL-User (da scheint es ja noch einige von zu geben) mit deinem System Probleme haben, da hier jeder Zugriff mit einer anderen IP-Adresse erfolgt.

    Und Surfer, die gerne anonym bleiben möchten und Tor verwenden, werden hier auch Probleme haben.

    Besser: Verschicke das Cookie über eine verschlüsselte (HTTPS) Verbindung.
    Dann ist die Möglichkeit, dass ein Angreifer das Cookie ausspioniert, gering.

    Grüße

    Marc Reichelt || http://www.marcreichelt.de/

    --
    Linux is like a wigwam - no windows, no gates and an Apache inside!
    Selfcode: ie:{ fl:| br:> va:} ls:< fo:} rl:( n4:( ss:) de:> js:| ch:? sh:| mo:) zu:)
    1. Hallo!

      Und Surfer, die gerne anonym bleiben möchten und Tor verwenden, werden hier auch Probleme haben.

      Ich frage auch noch das Passwort ab. Eine andere Möglichkeit sehe ich nicht, wenn ich nicht mit HTTPS arbeiten kann.

      Besser: Verschicke das Cookie über eine verschlüsselte (HTTPS) Verbindung.

      Mein Hoster bietet mir diese Möglichkeit nicht.

      ciao, ww

      --
      Ein japanisch-deutsches Gedicht
      sh:(  fo:|  ch:~  rl:(  br:>  n4:~  ie:%  mo:)  va:)  de:]  zu:)  fl:(  ss:|  ls:~  js:)
  3. Tach.

    Meine Frage: Ist dieses Vorgehen sicher, oder gibt es einen Grund zum Meckern? :) Mir geht es jetzt vorallem um das Prinzip. Weniger um den Code an sich.

    Naja, was heißt "sicher" ... Grobe Fehler im Ablauf sind erstmal nicht zu erkennen (außer, daß du vermutlich alles als Klartext überträgst); besonders detailliert hast du's aber auch nicht beschrieben. Außerdem ist es letzten Endes die konkrekte Umsetzung, d. h. genau der "Code an sich", der über die Sicherheit des Systems entscheidet. Und das muß nicht mal nur der Code sein, der direkt mit dem Loginsystem zu tun hat ...

    --
    Once is a mistake, twice is jazz.
    1. Hallo!

      Grobe Fehler im Ablauf sind erstmal nicht zu erkennen

      Das wollte ich wissen :)

      (außer, daß du vermutlich alles als Klartext überträgst);

      Was meinst du damit?

      Außerdem ist es letzten Endes die konkrekte Umsetzung, d. h. genau der "Code an sich", der über die Sicherheit des Systems entscheidet.

      Ja, dem bin ich mir bewusst.

      ciao, ww

      --
      Ein japanisch-deutsches Gedicht
      sh:(  fo:|  ch:~  rl:(  br:>  n4:~  ie:%  mo:)  va:)  de:]  zu:)  fl:(  ss:|  ls:~  js:)
      1. (außer, daß du vermutlich alles als Klartext überträgst);

        Was meinst du damit?

        Wahrscheinlich, dass du keine Verschlüsselung für die Datenübertragung verwendest.

        1. Hallo!

          (außer, daß du vermutlich alles als Klartext überträgst);

          Was meinst du damit?

          Wahrscheinlich, dass du keine Verschlüsselung für die Datenübertragung verwendest.

          Ja, das habe ich auch vermutet. Aber warscheinlich ist das Overkill bei meinen bescheidenen Einsatzmöglichkeiten. Auf jeden Fall ist es für mich auch gar nicht möglich, das ganze mit Verschlüsselung zu übertragen.

          ciao, ww

          --
          Ein japanisch-deutsches Gedicht
          sh:(  fo:|  ch:~  rl:(  br:>  n4:~  ie:%  mo:)  va:)  de:]  zu:)  fl:(  ss:|  ls:~  js:)
  4. hallo,

    ich hab mir damals zum test auch ein login-script gebastelt.
    dabei habe ich 4 verschiedene sicherheitsabfragen bei jedem aufruf eingebaut.

    aber vorher wird alles per ssl übertragen.

    1. jeder user bekommt eine id, die per get oder post immer mitübertragen wird

    2. hat "jeder" eine ip

    3. es steht in der datenbank das wort login oder logoff

    4. es ist ein zeitstempel in der datenbank

    jedes script / seite nach dem login im geschützten bereich prüft immer die ip und die id ob die mit der datenbank übereinstimmt, es wird geprüft, ob in der datenbank login oder logoff steht (was beim login bzw logoff immer geändert wird) und der zeitstempel in der datenbank ist die loginzeit + x sekunden, und der zeitstmpel in der datenbank muss größer als die aktuelle zeit sein.

    ich denke das es nie "sicherheit" gibt, aber ich sehe an dem vorgehen hier momentan keine großen fehler, oder seht ihr das anders?

    grüße cr