Login-Script Sicherheit

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

  • Login-Script Sicherheit

    Hallo,
    habe mich mal etwas durchs Weg gelesen und festgestellt das es ganz unterschiedliche LoginScript ansätze gibt...

    Variante 1 prüft ob Username/Passwort stimmen und setzt dann einen Sessioncookie wie z.B. $_SESSION['login_erfolgreich']=1. Auf den geschützten Seiten wird dann nur gefragt ob login_erfolgreich==1 ist und dann wird der geschützte Content ausgegeben, ansonsten nicht.

    Variante 2 speichert User und Pass beim einloggen neben dem login_erfolgreich in einem Sessioncookie und prüft dann im gegensatz zu variante 1 nicht nur beim einloggen in der DB auf korrektheit der daten, sondern dies wird obwohl login_erfolgreich==1 ist auf jeder geschützten seite nochmal durchgeführt. hierzu werden dann die im sessioncookie gespeicherten daten mit der in der DB vergleichen

    Also meine Frage jetzt...wenn Sessions doch serverseitig gespeichert werden und vom Client da keine Manipulationsmöglichkeit besteht, warum verwenden dann viele Variante 2? Ein Check am anfang ob user/pass korrekt sind müsste doch reichen, die ändern sich doch nicht alle paar minuten?!?

    Und wenn man Variante 2 benutzt, warum wird dann allgemein empfohlen die Passwörter verschlüsselt zu speichern...es heisst immer "klartextpasswörter in der session sind gefährlich..." aber warum wenn sie serverseitig liegt?

  • #2
    also ich hab von Möglichkeit 2 bisher nichts gesehen und finde ich auch spontan keine Vorteile daran. Wenn du in deiner Anwendung darauf achtest, $_SESSION['erfolgreich'] nur zu setzen, wenn der Login wirklich erfolgreich war, und man von Außen nicht an die Sessions ran kommt (was der Normalfall ist), braucht man höchstens noch die user-id in der Session um sich zu merken, wer sich eingeloggt hat, das Passwort aber auf keinen Fall

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

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

    Kommentar


    • #3
      also ich sage variante 1 ist besser, und verschlüsselungen auch..

      tipp:

      speicher die admin daten in der datenbank tabelle admin zb.

      das pw verschlüsselst du md5();

      eine abfrage würde dann z.b so aussehen...

      PHP-Code:
      <?PHP
      if (isset($_POST['submitbutton]))
      {
          $sql = "SELECT * FROM admin WHERE user = '".
      $_POST['username']."' AND pw = '".md5($_POST['passwort'])."'";
          $result = mysql_query($sql);

          if(mysql_num_rows($result) == 1)
          {
               $_SESSION['
      user_logged_in'] = 1;
          }
          else
          {
               $_SESSION['
      user_logged_in'] = 0;
          }
      }
      ?>
      und nun kannst du auf jeder php seite checken ob
      PHP-Code:
      $_SESSION['user_logged_in'] = 1
      ist..

      und dann gibste den admin content aus..

      also das ist so wie ich das mache...

      Allerdings würde ich von meinem script hier im moment abraten da ich es gerade im textfeld geschrieben habe, und es nicht getestet ist..
      Aber es ist ein gutes beispiel wie du soetwas realisieren könntes..
      Mfg Tobias Dosch

      Kommentar


      • #4
        Hallo,
        danke für die Antworten.

        Hier die Seite wo ich Variante 2 herhabe:

        http://www.ayom.com/faq/login-skript...sql-a-658.html

        Kommentar


        • #5
          wenn man ganz runter scrollt: Das Login-Skript stammt von http://www.php-resource.de.

          naja für mich wäre das kein login script...sind mir immoment zuviele dateien auf das das kleine script ausgelagert ist.
          Mfg Tobias Dosch

          Kommentar


          • #6
            Ich würde sogar dazu übergehen, das Passwort nicht nur per md5 zu verschlüsseln, sondern einen Zusatz von 3-4 zufälligen Zeichen an das PW anzuhängen. Das heißt, du hast z.B. in deiner DB ne neue Spalte und hast dort 3 oder 4 Zeichen drinne stehen, die für jeden User verschieden sind.... z.B. &-]F ... Wenn das PW dann z.B. "admin" ist, hängst du diese Zeichenkette an -> admin&-]F und führst darauf den md5 aus. Damit werden leichte Passwörter zu schwereren bei denen du mit ner Brute-Force Attacke vieeeeel länger brauchst um den Hash zu finden als ohne diesen Salt.... Und ne Kollision mit nem anderen PW kann man quasi ausschließen
            Für alle die Fehler suchen, gibts gratis tolle Debuggingmöglichkeiten:
            var_dump(), print_r(), debug_backtrace und echo.
            Außerdem gibt es für unsere Neueinsteiger ein hervorragendes PHP Tutorial zu PHP 4 und PHP 5 (OOP)
            Es heißt $array['index'] und nicht $array[index]! Und nein, das ist nicht egal!
            Dieses Thema lesen, um Ärger im Forum und verzögerte Hilfen zu vermeiden.

            Kommentar


            • #7
              na kollision kann man so auch verhindern, einfach abfragen ob das pw schonmal benutzt wurde..

              deine idee ist nicht schlecht, aber ehm. md5(); zu cracken braucht man mit nem brutforce prog, auch ein paar tage und einen sehr sehr leistungstarken pc..

              ich würde mal sagen mit einem dual Core pc und 5.2 GHZ würde das ganze in 2-3 tagen gehen, aber wer bitte macht sich die mühe? ich weiß zwar nicht wie weit deine seite berühmtheit hat, also z.b. nicht wie phpbb.de oder andere seiten wo sich ein angriff wohl eher lohnen würde...

              aber ich glaube ich werde deine idee übernehmen...wenn du nicht patent drauf willst

              EDIT: was hälst du von einer crypt(md()) verschlüsselung.. würde das eigentlich gehen? also bei mir ging das beim abgleichen nie fehlerfrei.
              Mfg Tobias Dosch

              Kommentar


              • #8
                Bei md5 Kollisionen zu finden ist kinderleicht, siehe Wikipedia, Google und andere Quellen.
                Für sicherheitsrelevante Sachen soll man schon lange sha1 verwenden, md5 sollte man nur noch verwenden, wenn man was schnelles braucht um alle Zeichen zu maskieren, um daraus zum Beispiel unterordner zu machen (/pics/4/40/das_bild.png, dann macht man auf das_bild.png md5 und kann daraus die beiden vorigen Ordner berechnen (ka, ob 40 jetzt wirklich die ersten beiden Stellen des Strings sind...)), für Passwörter immer sha1 benutzen!

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

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

                Kommentar


                • #9
                  davon hab ich zwar nichts mitbekommen, werde mich aber mal kundig machen ob das wirklich true ist was du da meanst.

                  *scheiß englisch ich weiß*
                  Mfg Tobias Dosch

                  Kommentar


                  • #10
                    @Shurakai, gute idee, hat allerdings auch einen höheren aufwand (z.b. zwei db queries)

                    was hälst du von doppeltem md5: md5(md5('passwort'))? hätte zumindest auch alle von dir genannten vorteile und ist einfacher zu handeln.

                    hm, ich lass das mal so stehen. habe dabei auch irgendwie ein "ungutes" gefühl.

                    Kommentar


                    • #11
                      OffTopic:

                      http://us.md5.crysm.net/

                      mfg

                      Kommentar


                      • #12
                        was sollen wir damit? bin nicht gerade der englisch freak
                        Mfg Tobias Dosch

                        Kommentar


                        • #13
                          Original geschrieben von Witzigerkiller
                          was sollen wir damit? bin nicht gerade der englisch freak
                          er will damit sagen das md5 NICHTS an sicherheit bringt weil mans ganz einfach wieder zurückrechnen kann
                          ist ja keine verschlüsselung sondern nurn hash...

                          gebt maln md5 ins erste textfeld ein und drückt enter...

                          Kommentar

                          Lädt...
                          X