Ankündigung

Einklappen
Keine Ankündigung bisher.

Problem mit MD5

Einklappen

Neue Werbung 2019

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

  • Problem mit MD5

    Hallo, ich mal wieder. Nachdem ich nun die Suchfunktion, Doku und Google benutzt habe, habe ich es geschafft mir ein loginscript sowie ein anmeldescript zu basteln, das ganze natürlich mit MD5, da es wie jeder sagte das sicherste ist.

    Mein PHP Code fürs anmelden schaut momentan so aus:

    Code:
    <?php
    mysql_connect("localhost","mar8125","xxx") or DIE ("Keine Verbindung zur Datenbank m&ouml;glich");
    mysql_select_db("mar8125_01") or DIE ("Die Datenbank existiert nicht");
    
    
    $user = $_POST["User"];
    $email = $_POST["email"];
    $passwort=md5(time());
    $passwort1=substr($passwort, 4, 5);
    
    
    
    
       // Absicherung, dass die Datei auch über das Formular aufgerufen wurde
       if( isset($_POST['User']) ) {
           // Eingabeprüfung
       }   
       else {
           echo "bitte &uuml;berpr&uuml;fe deine Angaben."; 
           exit();
        }
    
    if ($_POST["User"]== "")
    {
    echo "<center>Bitte gebe einen Benutzernamen ein.</center>";
    exit();
    }
    if ($_POST["email"]== "")
    {
    echo "<center>Bitte gebe eine E-Mail Adresse ein.</center>";
    exit();
    }
    
    $eintrag = "INSERT INTO users SET UserName='$user', UserPass=MD5'$passwort1',
      UserMail='$email'";
    
    $eintragen = mysql_query($eintrag) or DIE ("MySQL-Fehler: " . mysql_error());
    
    mysql_close();
    
    $betreff = 'www.mittleresZeitalter.de';
    $nachricht = "Hallo,
    
    deine Benutzerdaten sind folgende:
    
    $user
    $passwort
    
    Vielen Dank für die Registrierung auf mittleresZeitalter.de! Du kannst dich nun mit den oben genannten Daten einloggen. Das Passwort kannst du im Spiel ändern.";
    
    $header = 'From: noreply@mittleresZeitalter.de' . "\r\n" .
       'Reply-To: noreply@mittleresZeitalter.de' . "\r\n" .
       'X-Mailer: PHP/' . phpversion();
    
    mail($email, $betreff, $nachricht, $header);
    
    header ("Location: anmeldenok.html")
    ?>
    nur leider passiert genau das gegenteil was ich eigentlich will. Er zeigt dem Benutzer den MD5 Code an, und in der Datenbank steht das normale gernerierte pw. Jetzt meine frage, was mache ich falsch?

    Bin wie immer dankbar für jede einzelne antwort.

  • #2
    Was du machst ist einen Timestamp generieren. Daraus generierst du einen md5-Hash und speicherst in in $passwort.
    Jetzt nimmst du dir ab dem 4. Zeichen 5 weitere zeichen dieses md5-Hashes und schreibst sie in $passwort1.
    Diese 5 Zeichen aus $passwort1 schreibst du in deine DB und versuchst nochmal daraus einen md5-Hash zu machen (was nicht zu klappen scheint - speilt aber erstmal keine Rolle).

    Den 1. Md5-hash in $passwort schickst du jetzt dem user.


    Das macht so alles keinen Sinn
    Selbst wenn du $passwort in die DB schreibst und $passwort1 an den user schickst: Hier würde der md5-Hash nicht zum user-Passwort passen. Du solltest dir mal klarmachen was du da überhaupt machst

    Tipp:
    1. Generiere ein zufälliges Passwort $passwort.
    2. Generiere davon einen MD5-Hash $pwhash
    3. Schreibe $pwhash in die Datenbank
    4. Schicke dem User $passwort.
    Fertig.

    Das ist es doch was du willst?

    Kommentar


    • #3
      ja stimmt, so langsam kommt es mir glaub ich...

      also dann so?

      PHP-Code:
      <?php
      $user 
      $_POST["User"];
      $email $_POST["email"];
      $passwort rand(1000458,10005400);
      $pwhash MD5('$passwort');
      ?>
      wenn ich es so mache steht bei mir in der Datenbank eine 0. Oder wie funktioniert dieser hash befehl?

      Kommentar


      • #4
        So ähnlich ja

        Du solltest die Anführungszeichen um $passwort entfernen.
        Außerdem würde ich das Passwort anders erzeugen - aber egal.

        Wenn in deiner Datenbank eine 0 steht: Was hat die Spalte für einen Typ? Int?

        Kommentar


        • #5
          wie würdest du denn das pw erzeugen? Wäre deine Methode sicherer?

          Bei mir steht INT(11)

          muss ich das ändern?

          Kommentar


          • #6
            Ja das solltest du ändern - Ein md5-hash enthält nicht nur Ziffern. 'text' würde gehn (Keine Ahnung was die Datenbank-Spezialisten hier dazu sagen )

            Such doch einfach mal nach "Passwort zufällig erzeugen" oder so.

            Kommentar


            • #7
              http://de2.php.net/mt_rand
              1. Userbeispiel

              Meine Funktion sieht unabhängig davon ähnlich aus:
              PHP-Code:
              <?php
              function generatePW($length 8) {
                  
              $list 'abcdefghijkmnpqrstuvwxyzABCDEFGHKLMNPQRSTUVWXYZ123456789';
                  
              $password '';
                  
              $c strlen($list) - 1;
                  do {
                      
              $r mt_rand(0$c);
                      
              $password .= substr($list$r1);
                  } while(
              strlen($password) < $length);
                  return 
              $password;
              }
              ?>

              Kommentar


              • #8
                wäre das denn sicherer, weil MD5 kann man ja so oder so nicht knacken oder?

                Achja, jetzt funktioniert es soweit, DANKE!

                Kommentar


                • #9
                  Knacken nicht. Aber per Brute-Force - blindem ausprobieren von Passwörtern geht alles.

                  Such mal im Forum nach md5, du wirst einiges an Information dazu finden. Könnte intressant für dich sein.

                  Kommentar


                  • #10
                    Sicherer?
                    Die Funktion von mir generiert dir nur ein Passwort, hast du das nicht gesucht? Oder was habt ihr da mit $passwort = substr() gemacht?!

                    MD5() solltest du immer trotzdem drüber laufen lassen, damit ein Passwort niemals im Klartext dargestellt wird, den das PW darf nur der User kennen.

                    http://de.wikipedia.org/wiki/Md5

                    Kommentar


                    • #11
                      nein, aber man könnte das passwort durch ausprobieren herausfinden.

                      Ich generier meine Passwärter immer ungefähr so:
                      PHP-Code:
                      <?php
                      $pw 
                      substr(md5(time().uniqid(time())),6,8);
                      ?>
                      aber die methode von Zergling ist auch nicht verwerflich ^^

                      Achja und ich würde der spalte den Typ Varchar geben, weil ich glaube, das das weniger platz verbraucht, aber sicher bin ich mir da nicht.

                      Kommentar


                      • #12
                        @zwergling,

                        ich meinte eigentlich ob es sicherer ist eine Buchstabenkombination statt ein Zahlencode zu nehmen.

                        werde mir nachher mal einige Themen durchlesen die mit MD5 zutun haben.

                        Kommentar


                        • #13
                          Wenn Ausenstehende wissen oder ahnen können, dass der Suchraum nur aus Zahlen besteht, ist das unsicherer als wenn sie Ziffern und Buchstaben abklappern müssen.

                          Kommentar


                          • #14
                            ok, werde das wahrscheinlich nochmal ändern.

                            Hab jetzt noch ein weiteres Problem, vor header("Location: blaabla.html") darf ja keine Ausgabe sein, wie kann ich das sonst machen? Mein Code schaut momentan so aus: (ist nicht das script von vorhin^^)

                            PHP-Code:
                            <?php
                            <?php
                            include 'sessionhelpers.inc.php';
                            if (isset(
                            $_POST['login']))
                            {
                                
                            $userid=check_user($_POST['username'], $_POST['userpass']);
                                if (
                            $userid!=false)
                                    
                            login($userid);
                                else
                                    echo 
                            'Ihre Anmeldedaten waren nicht korrekt!';
                            }
                            if (!
                            logged_in())
                                echo 
                            '<center><form method="post" action="login.html">
                                    <label><font face="Courier New">Username: </font></label><input name="username" type="text">

                                    <label><font face="Courier New">Passwort: </font></label><input name="userpass" type="password" id="userpass">


                            </p>
                                    <input name="login" type="submit" id="login" value="Senden"></center>
                                </form>'
                            ;
                            else {
                            header("Location: index.html");
                            }
                            ?>
                            ?>
                            nun geht das ja nicht, das die index.html aufgerufen wird. Wie kann ich das machen? THX schonmal.

                            Kommentar


                            • #15
                              Versuch's mal mit META, hier ein Bsp.:

                              PHP-Code:
                              <?php
                                      
                              echo "<meta http-equiv=\"refresh\" content=\"3; URL=http://" $GLOBALS["host"] . $GLOBALS["file"] . "?site=index&".SID."\">"

                              ?>
                              Dann setzt du noch "content" auf 0, veränderst die URL, und fertig!

                              Kommentar

                              Lädt...
                              X