• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Login-Skript - Passwort wird falsch verschlüsselt? MD5

jobo218

Mitglied
Hallo,

möchte mit ein paar einfachen PHP-Dateien einen geschützten Bereich mit User-Login bauen.

Bin neu im PHP-Session Bereich und mein Code hat irgendwie einen Fehler..

Meines Erachtens wird das Passwort beim Login falsch verschlüsselt.. Beide male benutze ich jedoch die m5-Funktion.

Zur Fehleranalyse gebe ich das im Anmeldeformular angegebene Passwort und das in der Datenbank für diese Emailadresse hinterlegte Passwort in der login.php aus und stelle fest, dass bei dem Passwort in der Datenbank jeweils 2 Zeichen fehlen bzw. beim im Formular eingegebenen 2 zu viel sind..?

Weiß jemand von euch vielleicht einen Tipp? Wäre sehr dankbar :)

Hier meine Login.php
PHP:
<?php
session_start();
?>

<?php
$verbindung = mysql_connect("xxxxx");

$email = $_POST["email"];
$passwort = md5($_POST["passwort"]);

$abfrage = "SELECT email, passwort FROM af_logins WHERE email LIKE '$email' LIMIT 1";
$ergebnis = mysql_query($abfrage);
$row = mysql_fetch_object($ergebnis);

echo $row->passwort;
echo $passwort;
if($row->passwort == $passwort)
    {
    $_SESSION["email"] = $email;
    header('Location: /konto/af_index.html');
    }
else
    {
    echo "Email-Adresse und/oder Passwort waren falsch. Bitte erneut versuchen. <br><br><a href=\"anmelden.html\">Login</a>";
    }

?>



Meine registrierung.php
PHP:
....
$passwort = $_POST["formPasswort"];

if($passwort != $passwort2 OR $anrede == "" OR $vorname == "" .... )
    {
    echo "Eingabefehler. Bitte alle Felder korekt ausfüllen. <a href=\"index.html\">Zurück</a>";
    exit;
    }
$passwortneu = md5($passwort);

$result = mysql_query("SELECT id FROM af_logins WHERE email LIKE '$email'");
$menge = mysql_num_rows($result);

if($menge == 0)
    {
    $eintrag = "INSERT INTO af_agentur (..., passwort) VALUES (...  '$passwortneu')";
    $eintragen = mysql_query($eintrag);

    if($eintragen == true)
        {
        echo "Ihr Affiliate-Konto mit der Email-Adresse <b>$email</b> wurde erstellt. Bitte melden Sie sich hier an: <a href=\"anmelden.html\">Login</a> "; 
echo $passwort;
        }
    else
        {
        echo "Fehler beim Speichern Ihres Kontos. <a href=\"index.html\">Zurück</a>";
        }
    }

else
    {
    echo "Diese Emailadresse ist schon vorhanden. Bitte wenden Sie sich an den Support. <a href=\"eintragen.html\">Zurück</a>";
    }
?>
 
Werbung:
Könnte es vielleicht daran liegen das du das Feld in der Datenbank zu kurz angegeben hast, also das zu wenige Zeichen da rein passen?

Und du solltest dir mysqli anschauen anstelle von mysql, denn die mysql Funktionen sind deprecated und es ist nur eine Frage der Zeit bis die mit der nächsten PHP Version verschwinden.
 
Wow.. Wie dämlich von mir..

Wirklich peinlich :) 100mal schau ich mir die paar Zeilen Code durch und auch in die DB-Tabelle, aber auf die Zeichenanzahl komm ich nicht :)

Danke dir für deine schnelle Hilfe..
 
Werbung:
Werbung:
Da md5 unter Umständen für verschiedene Eingabe strings die selben Ausgabe strings generiert und man somit auch gesalzene mit rainbow Tables erwischen kann


Gesendet von meinem iPhone mit Tapatalk
 
Muss man dafür nicht erst den Salt kennen? Außerdem kann das auch bei anderen Verschlüsselungen passieren.

Ja, den musst du kennen.

MD5 ist nicht sicher, wenn dein komplettes System übernommen wird.
Also wenn der Salt bekannt ist.

Davon muss man durchaus ausgehen, wenn man sehr auf Sicherheit bedacht ist. Also der Worst-Case.
Nach dem Motto:
Wenn der Angreifer schon meine Datenbank hat, wieso nicht auch meinen Quellcode?

Mit MD5, dem Salt und entsprechendem Equipment ist es aufgrund der schnellen Performance des Algorithmus möglich auf eine Vielzahl von Kollisionen pro Sekunde zu testen.
Es ist also durchaus realistisch ohne extremen Aufwand die Passwörter zu knacken.

Und zu guter Letzt: Wieso ist MD5 so schnell?
Ganz einfach: Es ist nicht darauf ausgelegt, Passwörter zu verschlüsseln. MD5 ist eine Hashfunktion.

Das mit den Rainbow Tables stimmt jedoch nicht.
Wenn du den Salt nicht kennst, bringt dir als Angreifer auch eine Kollision von Hashwerten nichts. Schließlich willst du ja das Passwort im Klartext.
 
Werbung:
Mich würde mal interessieren, was denn dort nun eine gute und sichere Vorgehensweise wäre. Ich bin bisher immer so vorgegangen.
PHP:
sha1($password.$salt)
 
Werbung:
Zurück
Oben