Ergebnis 1 bis 10 von 10

Thema: PHP Passwort vergessen funktion

  1. #1
    Youngster
    Registriert seit
    02.02.2009
    Beiträge
    19
    Danke
    0
    Bekam 0 mal "Danke" in 0 Postings

    Standard PHP Passwort vergessen funktion

    Hallo,

    Ich hab ein passwort vergessen Script das nicht ganz so funktioniert wie ich das möchte und zwar das Script schaut ob die E-Mail vorhanden ist, es löscht auch das alte Passwort trägt aber kein neues ein an was kann das liegen?

    Hier das Script:

    PHP-Code:
    <html>
    <head>
    <title>Neues Kennwort anfordern</title>
    <meta http-equiv=\"expires\" content=\"0\">
    <meta http-equiv=\"pragma\" content=\"no-cache\">
    <meta http-equiv=\"cache-control\" content=\"no-cache\">
    <meta http-equiv=\"content-language\" content=\"de\">
    <meta http-equiv=\"content-type\" content=\"text/html; charset=iso-8859-1\">
    <meta http-equiv=\"imagetoolbar\" content=\"no\"><link rel=stylesheet href=style.css type=text/css>
    </head>
    <body>

    Solltest Du dein Kennwort vergessen haben, helfen wir dir, innerhalb weniger Minuten ein neues festzulegen.<br>
    Tragen dazu bitte die bei der Kontoeröffnung angegebene E-Mail-Adresse ein und klicke dann auf "Abschicken". 
    <br><br>
    <?php

    ?>

    <?php
        error_reporting
    (E_ALL);

        
    $MYSQL_HOST 'localhost';
        
    $MYSQL_USER '......';
        
    $MYSQL_PASS '.......';
        
    $MYSQL_DATA '......';

        
    $connid = @mysql_connect($MYSQL_HOST$MYSQL_USER$MYSQL_PASS) OR die("Error: ".mysql_error());
        
    mysql_select_db($MYSQL_DATA) OR die("Error: ".mysql_error());

        if(isset(
    $_POST['submit']) AND $_POST['submit']=='Abschicken'){
            
    // Daten prüfen
            
    $errors = array();
            if(!isset(
    $_POST['email']))
                
    $errors[] = "Bitte benutze unser Passwortformular";
            else{
                if(
    trim($_POST['email']) == "")
                    
    $errors[] = "<b>Gebe deine Ihre Email-Adresse ein.</b>";
                
    // Nickname suchen
                
    $sql "SELECT
                            email
                        FROM
                            ft_user
                        WHERE
                            email = '"
    .mysql_real_escape_string(trim($_POST['email']))."'
                            "
    ;
                
    $result mysql_query($sql) OR die("<pre>\n".$sql."</pre>\n".mysql_error());
                
    $row mysql_fetch_assoc($result);
                if(!
    $row)
                    
    $errors[] = "<b>Deine Email-Adresse konnte nicht gefunden werden.</b>\n";
            }
            if(
    count($errors)){
                echo 
    "<b>Dein Passwort konnte nicht versendet werden.</b><br>\n".
                     
    "<br>\n";
                foreach(
    $errors as $error)
                    echo 
    $error."<br>\n";
                echo 
    "<br>\n";
                echo 
    "Zurück zum <a href=\"".$_SERVER['PHP_SELF']."\">Formular</a>\n";
            }
            else {
                
    // Neues Passwort erstellen
                
    $pass substr(chr(rand()),0,8);
                
    $sql "UPDATE
                            ft_user
                        SET
                            pass = '"
    .chr(trim($pass))."'
                        WHERE
                            email = '"
    .mysql_real_escape_string(trim($_POST['email']))."'
                       "
    ;
                
    mysql_query($sql) OR die("<pre>\n".$sql."</pre>\n".mysql_error());

                
    // Email verschicken
                
    $empfaenger $row['email'];
                
    $titel "Neues Passwort";
                
    $mailbody "Dein Passwort wurde erfolgreich geändern, dein neues Passwort lautet:\n\n".
                            
    $pass."\n\n".
                            
    "Dein altes Passwort wurde gelöscht.";
                
    $header "From: marcelambros@gmx.de\n";
                if(@
    mail($empfaenger$titel$mailbody$header)){
                    echo 
    "<b>Dein neues Passwort wurde erfolgreich an deine Email-Adresse versandt.</b><br>\n".
                         
    "Zurück zur <a href=\"index.php\">Startseite</a>\n";
                }
                
    // Im Fehlerfall wird die Mailadresse des Webmasters für den direkten Versandt eingeblendet
                
    else{
                    echo 
    "<b>Beim Senden der Email trat ein Fehler auf.</b><br>\n".
                         
    "<b>Bitte wende dich direkt an den <a href=\"mailto:webmaster@website.de\">Webmaster</a>.</b>\n";
                }
            }
        }
        else{
                echo 
    "<form ".
                     
    " name=\"pass\" ".
                     
    " action=\"".$_SERVER['PHP_SELF']."\" ".
                     
    " method=\"post\" ".
                     
    " accept-charset=\"ISO-8859-1\">\n";
                echo 
    "<b>Email-Adresse eingeben:</b>\n";
                echo 
    "<input type=\"text\" name=\"email\" maxlength=\"32\">\n";
                echo 
    "<br><br>\n";
                echo 
    "<input type=\"submit\" name=\"submit\" value=\"Abschicken\">\n";
                echo 
    "</form>\n";
        }
    ?> 

    </body>
    </html>
    Hoffe ihr könnt mir helfen.

    Mfg
    Achtung: Dies ist ein alter Thread im HTML und Webmaster Forum
    Diese Diskussion ist älter als 90 Tage. Die darin enthaltenen Informationen sind möglicherweise nicht mehr aktuell. Erstelle bitte zu deiner Frage ein neues Thema im Forum !!!!!

  2. #2
    Großmeister(in)
    Registriert seit
    09.12.2008
    Ort
    Berlin
    Alter
    38
    Beiträge
    666
    Danke
    0
    Bekam 0 mal "Danke" in 0 Postings
    Blog-Einträge
    1

    Standard AW: PHP Passwort vergessen funktion

    Wird wohl daran liegen, dass chr(trim($pass)) in deinem UPDATE-Befehl einen leeren String zurückgibt. Andernfalls würde das Passwort ja nicht "gelöscht" werden. (gelöscht wird es ja nicht, sondern auf einen leeren Wert gesetzt)
    Gib dir mal beim UPDATE dein $sql aus.
    "Programming today is a race between software engineers
    striving to build bigger and better idiot-proof programs,
    and the universe trying to build bigger and better idiots.
    So far, the universe is winning."
    Rick Cook

  3. #3
    Youngster
    Themenstarter

    Registriert seit
    02.02.2009
    Beiträge
    19
    Danke
    0
    Bekam 0 mal "Danke" in 0 Postings

    Standard AW: PHP Passwort vergessen funktion

    Danke für deine Antwort.

    Aber ich bin in der Sache noch ein blutiger Anfänger. Was genau meinst du mit beim Update die $sql ausgeben?

    Mfg.

  4. #4
    Großmeister(in)
    Registriert seit
    09.12.2008
    Ort
    Berlin
    Alter
    38
    Beiträge
    666
    Danke
    0
    Bekam 0 mal "Danke" in 0 Postings
    Blog-Einträge
    1

    Standard AW: PHP Passwort vergessen funktion

    An der Stelle wo du das Passwort updaten möchtest schreibst du
    PHP-Code:

                $sql 
    "UPDATE
                            ft_user
                        SET
                            pass = '"
    .chr(trim($pass))."'
                        WHERE
                            email = '"
    .mysql_real_escape_string(trim($_POST['email']))."'
                       "

    Da sollst du einfach mal ein
    PHP-Code:
    echo $sql
    hintersetzen. Dann kannst du sehen wie der Query aussieht und was für die Variablen eingesetzt wird. Ich möchte wetten, dass in dem Query dann steht "... SET pass='' WHERE ..."
    Wo hast du denn eigentlich die Passwortgenerierung her? chr() sagte mir jetzt spontan nichts, noch nie verwendet, aber ich vermute mal, dass das Problem damit zusammenhängt. Ansonsten sieht das nämlich alles soweit erstmal richtig aus.
    "Programming today is a race between software engineers
    striving to build bigger and better idiot-proof programs,
    and the universe trying to build bigger and better idiots.
    So far, the universe is winning."
    Rick Cook

  5. #5
    Youngster
    Themenstarter

    Registriert seit
    02.02.2009
    Beiträge
    19
    Danke
    0
    Bekam 0 mal "Danke" in 0 Postings

    Standard AW: PHP Passwort vergessen funktion

    Da Script sah am Anfang anderst aus und so funktioniert es auch einwandfrei.

    Das stand dort:
    PHP-Code:
    // Neues Passwort erstellen
                
    $pass substr(md5(microtime()),0,8);
                
    $sql "UPDATE
                            ft_user
                        SET
                            pass = '"
    .md5(trim($pass))."'
                        WHERE
                            email = '"
    .mysql_real_escape_string(trim($_POST['email']))."'
                       "
    ;
                
    mysql_query($sql) OR die("<pre>\n".$sql."</pre>\n".mysql_error()); 
    Allerdings wird bei meinem Login das Passwort nicht md5 Verschlüsselt und so hab ich rumgeggogelt und ausbrobiert wie ich das ändere, nur ich hab nichts gescheites gefunden.

  6. #6
    Großmeister(in)
    Registriert seit
    09.12.2008
    Ort
    Berlin
    Alter
    38
    Beiträge
    666
    Danke
    0
    Bekam 0 mal "Danke" in 0 Postings
    Blog-Einträge
    1

    Standard AW: PHP Passwort vergessen funktion

    Wenn du das Passwort nur für die Datenbank anders verschlüsseln möchtest brauchst du das auch nur im Datenbank-Query ändern. Die Passwort-Generierung lässt du wie sie ist. Bist du sicher, dass chr() die richtige Funktion für dich ist?

    http://php.net/manual/de/function.chr.php
    chr
    (PHP 4, PHP 5)
    chr — Gibt ein einzelnes Zeichen zurück

    Also das lässt du so wie es ist:
    PHP-Code:
    $pass substr(md5(microtime()),0,8); 
    "Programming today is a race between software engineers
    striving to build bigger and better idiot-proof programs,
    and the universe trying to build bigger and better idiots.
    So far, the universe is winning."
    Rick Cook

  7. #7
    Youngster
    Themenstarter

    Registriert seit
    02.02.2009
    Beiträge
    19
    Danke
    0
    Bekam 0 mal "Danke" in 0 Postings

    Standard AW: PHP Passwort vergessen funktion

    Okay.

    Mir wurde gesagt dass wenn ein Passwort md5 verschlüsselt ist kann man es nicht mehr entschlüsseln sprich das Script selber verschlüsselt ja das Passwort wie soll man das dann in der Datenbank anders abspeichern?

  8. #8
    Großmeister(in)
    Registriert seit
    09.12.2008
    Ort
    Berlin
    Alter
    38
    Beiträge
    666
    Danke
    0
    Bekam 0 mal "Danke" in 0 Postings
    Blog-Einträge
    1

    Standard AW: PHP Passwort vergessen funktion

    Um genau zu sein verschlüsselt md5() nicht. md5() ist ein Hashverfahren, und die sind nicht rückrechenbar.
    D.h. ein String ergibt wenn er mit md5() gehasht wird immer den gleichen 32-Zeichen-String (Hash) der nicht zurückgerechnet werden kann. Da aber eben immer der gleiche Hash generiert wird können die Passwörter aber trotzdem abgeglichen werden. Beim Login hasht man einfach das vom User eingegebene Passwort und vergleicht diesen Hash-Wert dann mit dem der in der Datenbank hinterlegt ist.
    Das erste md5() bei der Generierung des Passwortes $pass in deinem Script hat aber noch nichts mit der Form zu tun, in der es dann in der Datenbank abgelegt wird (ob jetzt gehasht oder verschlüsselt). Es geht ja da erstmal um das Passwort im Klartext, md5() ist an der Stelle nur ein Hilfsmittel zur Erstellung eines zufälligen Passwortes.
    microtime() gibt den aktuellen Unix-Timestamp mit Mikrosekunden zurück. Dieser Timestamp wird dann mittels md5() gehasht um einen 32-Zeichen-String aus Zahlen und Buchstaben zu erhalten. Da 32 willkürliche Zeichen aber arg lang sind für ein Klartextpasswort wird dieser String noch mittels substr() auf 8 Zeichen gekürzt.
    Was dann in $pass gespeichert wird ist also ein 8-Zeichen-String aus Zahlen und Buchstaben. Das ist das neue Passwort des Users im Klartext, wie es auch an ihn verschickt wird.

    Wie dieses Passwort dann für die Datenbank verschlüsselt oder gehasht wird braucht nur bei der Übergabe des Passworts an die Datenbank festgelegt werden.
    Wenn du deine Passwörter verschlüsseln willst (um die Möglichkeit zum entschlüsseln zu haben) solltest du dir mal AES oder RSA anschauen. Dann brauchst du allerdings auch keine Funktion die dir ein neues Passwort generiert, weil du dann ja die Möglichkeit hast den Usern in der "Passwort vergessen"-Funktion ihr aktuelles Passwort entschlüsselt mitzuteilen.

    Wenn du die Passwörter hashen möchtest kannst du dir sha1 oder md5 anschauen. Da solltest du allerdings zusätzlich einen Salt verwenden (ein String der vor dem hashen an die Passwörter gehängt wird), da es besonders für md5 mittlerweile sehr umfangreiche Rainbow-Tables gibt (Tabellen die Strings und ihre zugehörigen md5-Hashs abbilden).
    "Programming today is a race between software engineers
    striving to build bigger and better idiot-proof programs,
    and the universe trying to build bigger and better idiots.
    So far, the universe is winning."
    Rick Cook

  9. #9
    Youngster
    Themenstarter

    Registriert seit
    02.02.2009
    Beiträge
    19
    Danke
    0
    Bekam 0 mal "Danke" in 0 Postings

    Standard AW: PHP Passwort vergessen funktion

    Vielen vielen Dank dass du dir die Mühe gemacht hast mir das so genau zu erklären! Hast mir echt weitergeholfen Danke.

    Mfg.

  10. #10
    Großmeister(in)
    Registriert seit
    09.12.2008
    Ort
    Berlin
    Alter
    38
    Beiträge
    666
    Danke
    0
    Bekam 0 mal "Danke" in 0 Postings
    Blog-Einträge
    1

    Standard AW: PHP Passwort vergessen funktion

    Gerne. Zur Verschlüsselung mit AES oder RSA hat Dodo hier im Forum auch schon einen Thread eröffnet:
    http://www.forum-hilfe.de/threads/48...er-abspeichern

    Das Problem an der Verschlüsselung ist, dass du immer auch zumindest den Key zum Entschlüsseln im Klartext parat haben, also auch auf dem Server verfügbar. D.h. sollte jemand wie auch immer kompletten Zugriff auf den Server bekommen, hat er potentiell sofort auch alle Passwörter im Klartext. Bei Passwort-Hashs mit randomized salts dauert das schon länger.

    Edit: Bezüglich des Mail-Versands möchte ich dir mal noch wärmstens den PHPMailer ans Herz legen. Von der PHP-Funktion mail() rate ich dir ab.
    Kurzes Tut zum PHPMailer:
    http://phpforum.de/forum/showthread.php?t=216932

    Zum verschlüsseln muss ich grad noch bezüglich RSA korrigieren. Dort gibt es unterschiedliche Keys zum ver- und entschlüsseln. Der Server benötigt also zum Passwort-Abgleich nur den Key zum verschlüsseln.
    Geändert von SinnlosS (10.03.2011 um 00:25 Uhr) Grund: PHPMailer-Hinweis ergänzt
    "Programming today is a race between software engineers
    striving to build bigger and better idiot-proof programs,
    and the universe trying to build bigger and better idiots.
    So far, the universe is winning."
    Rick Cook

Ähnliche Themen

  1. BIOS Passwort vergessen
    Von Thonixx im Forum Computer - Internet Forum
    Antworten: 10
    Letzter Beitrag: 13.12.2008, 01:04
  2. icq - Passwort vergessen !!!
    Von Laptoperer im Forum Computer - Internet Forum
    Antworten: 6
    Letzter Beitrag: 20.09.2008, 10:35
  3. passwort vergessen
    Von der_tim im Forum Promotion - SEO - Suchmaschine (Google & Co) – Mitarbeiter & Linkpartnersuche
    Antworten: 2
    Letzter Beitrag: 13.07.2008, 15:13
  4. ICQ Passwort vergessen !!
    Von Sheilong_One im Forum Computer - Internet Forum
    Antworten: 16
    Letzter Beitrag: 09.08.2007, 17:44
  5. PASSWORT VERGESSEN
    Von PC-Freak im Forum Computer - Internet Forum
    Antworten: 14
    Letzter Beitrag: 05.05.2007, 12:13

Stichworte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •