Passwort ändern-Skript

  • Hallo könnte mal bitte jemand drüber schauen, und mir sagen, warum das neue Passwort nicht in die Datenbank geschrieben wird?



    PHP-CODE:

    <?php
    session_start();
    include("config.inc.php");
    include("header.php");

    if($_POST['newpass']==$_POST['newpass2']&& $_POST['newpass']>5 && $_POST['newpass2']>5) {
    $db->query("UPDATE k_user SET passwort='".$newpass."' WHERE u_id='".$_SESSION['u_id']."'");
    echo 'Passwort wurde erfolgreich geändert!';

    }
    else{
    print "<div id='fehler'><img src=\"Bilder/error.png\"> Das Passwort muss min. 5 Zeichen lang sein!</div>";
    ?>
    <center>
    <table>
    <tr><td><form method="post" action="changePass2.php"><br> </td></tr>
    <tr><td><label>Altes Passwort: </label><td><input name="oldpass" type="password" id="oldpass"><br></td></td></tr>
    <tr><td><label>Neues Passwort: </label><td><input name="newpass" type="password" id="newpass"><br></td></td></tr>
    <tr><td><label>Neues Passwort (wiederholen): </label><td><input name="newpass2" type="password" id="newpass2"></td></td></tr>
    <tr><td><input name="passaendern" type="submit" id="passaendern" value="Passwort ändern"></td></tr>
    </table>
    </center>
    <?
    include("footer.php");

    }

    ?>


    In der Datenbank wird das Passwort einfach gelöscht(leer), anstatt das neue Passwort zu aktualisieren.


    Vielen Dank für eure Hilfe.

  • PHP
    $db->query("UPDATE k_user SET passwort='".$newpass."' WHERE u_id='".$_SESSION['u_id']."'");


    Ähm, gehört da nicht

    PHP
    $db->query("UPDATE k_user SET passwort='".$_POST['newpass']."' WHERE u_id='".$_SESSION['u_id']."'");


    So, und jetzt zu ein paar Dingen, die mir da aufgefallen sind:

    if($_POST['newpass']==$_POST['newpass2']&& $_POST['newpass']>5 && $_POST['newpass2']>5) {

    Wenn die zwei Passwörter gleich sind (und nur dann besteht die Möglichkeit, dass $_POST['newpass2']>5 ausgewertet wird), ist $_POST['newpass2'] genau dann länger als fünf Zeichen, wenn $_POST['newpass'] länger als fünf Zeichen lang ist, d.h. die Überprüfung, ob das $_POST['newpass2'] länger als fünf Zeichen ist, kannst du streichen.

    $db->query("UPDATE k_user SET passwort='".$newpass."' WHERE u_id='".$_SESSION['u_id']."'");

    Böse.

    Warum?

    • Ich setze mal mein Passwort auf "abc';". Dann haben ab sofort alle Benutzer das Passwort "abc"? Kann ich mich dann als beliebiger User mit diesem Passwort anmelden und beliebigen Unfug anstellen?
    • Ich setze mal das Passwort auf "abc'; DROP TABLE k_user;". Ist dann die Tabelle k_user weg?
    • Passwörter im Klartext in Datenbanken zu speichern ist böse.

    Zu den ersten beiden Punkten: mysql_real_escape_string verwenden.

    Zum dritten Punkt: Hashwert (z.B. mit md5 ermittelt) abspeichern. Zur Überprüfung, ob das korrekte Passwort eingegeben wurde, ist die Hashfunktion auf die Eingabe anzuwenden. Dann sind die beiden Hashwerte miteinander zu vergleichen.

  • Noch besser ist, vor Absenden des Formulars schon md5-hashes (am besten salted, im Stil von CHAP) zu bilden.
    Ich hab das schon mal implementiert ... werd mal eine einfach einzubindende Library schreiben...

    It's like the square root of one million ... no one will ever know.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!