Passwort vergessen Script

DeepZone

Grünschnabel
Hallo zusammen.
Seid geraumer zeit sitze ich nun schon an einem PW vergessen script.
Das Script ansich funktioniert soweit es wird kontrolliert ob die angegebene Email vorhanden ist. Ist sie das wird eine Email mit dem PW versendet. Und da liegt der Fehler. Die email wird versendet, kommt auch an, aber statt dem PW steht dann: Resource id #6

Das PW ist nicht MD5 verschlüsselt. Bitte reitet jetzt auch nicht auf MD5 rum. Da bin ich noch nicht.

Vielen Dank schon mal.

Hier einmal der Code
PHP:
<?
case "newpw":

if (!isset ($_POST["email"]))  
{  
?>
Wenn du dein Passwort vergessen hast trage hier deine Emailadresse ein die du bei der Anmeldung hinterlegt hast und wir senden dir das Passwort erneut zu.</p>
<p>
Ihre eMail-Adresse: 

<form name="pass" action="index.php?site=newpw" method="POST" >
<input type="name" name="email" />
<input type="submit" name="Senden" id="Senden" value="Senden" />
</form>  
</p>

<?  
} else {
error_reporting(E_ALL);     
require_once ('db.php');
$db_link = mysql_connect (MYSQL_HOST, MYSQL_BENUTZER, MYSQL_KENNWORT);   
mysql_select_db(MYSQL_DATENBANK); 
$email = $_POST["email"]; 
$sql = "SELECT pass, FROM user where email = '$email' LIMIT 0, 1";

$result = mysql_query($sql); 
$row = mysql_fetch_assoc($result); 


if (mysql_num_rows($result) == 0) { 
   echo "Die angegebene E-mail adresse oder der Username konnte keinem Benutzer zugeordnet werden!"; 
   
} else {
	
$subject = "Passwortanfrage"; 
$text = "
Hallo 
Du hast auf unsere seite dein Passwort angefordert da du dies vergessen hast.
Dein Passwort lautet: $result

Mit freundlichen Gruessen

mail($email, $subject, $text, "FROM: <noreplay@domain.tdl>") or die("Die Mail konnte nicht versendet werden.");
echo "Dein Passwort wurde dir zugeschickt.";
}}
break;
?>
 
Hinter dem "pass" in der SQL Abfrage ist ein Komma zuviel. Weiterhin liest du ein Array aus und musst es auch dementsprechend ansprechen.
Statt $result sollte es also in der E-Mail $row['pass'] heißen.

Noch dazu würde ich die eigentliche Abfrage NACH dem Zählen der Ergebnisse machen. Spart Rechenzeit.
 
Zuletzt bearbeitet:
Ach der Herr Jacobi, man merkt es ihm an, dass er übermüdet ist. Dein Problem steckt wohl eher darin, dass $result eine Ergebnisresource deines Querys ist und du dementsprechend in der E-Mail das nutzen musst, was dir mysql_fetch_assoc() zurück gibt, also bei dir $row['pass']. Außerdem fehlt bei dir nach dem "Mit freundlichen Grüßen" ein schließendes doppeltes Anführungszeichen und ein Semikolon. Ansonsten solltest du aber auch das beachten, was dir Felix schrieb: da ist ein Komma zu viel in deiner Abfrage.
 
Zuletzt bearbeitet:
Super vielen Dank. $row['pass'] war es dann.

Die anderen Fehler waren im Script selbst nicht vorhanden. Die haben sich hier nur eingeschlichen beim Posten da ich einige stellen die irrelevant waren entfernt habe. Ohne Streichhölzer zwischen den Augenlidern geht dann doch mal so ein Komma an einem vorbei :)...

Vielen Dank für die schnelle Hilfe.
 
Selbst wenn in der DB das Passwort in md5 wär könntest du es zwar dann per E-mail verschicken, aber trotzdem wäre es noch md5 verschlüsselt -> nützt der jenigen Person nichts. Lass lieber eine Geheimfrage mit Antwort angeben und wenn man diese richtig eingibt, kann man sein Pw ändern.
 
iUniverse: Vorrausgesetzt man hat alleinigen Zugriff auf seine Emailadresse, ist die Geheimfrage meiner Meinung nach sinnlos. Außerdem vergesse ich da die Antwort immer :D
 
DB wird gehackt, hacker sieht alle Passwörter von den Leuten die sich mit den selben Daten z.b. bei Facebook angemeldet haben -> Pech gehabt. Das meine ich.
 
Naja, sinnvolle Geheimfragen, wie z.B. "Wie heißt deine Mutter mit Vornamen?", sollte man doch lösen können. ;) Ich hab mir angewöhnt, Geheimfragen-Antworten immer klein zu schreiben. Dann hab ich da schon mal ein Erinnerungsproblem weniger...

Theoretisch würde ich das Script auch eher abändern. Zuerst einmal in der DB md5-verschlüsselte Passwörter.

Das Script bietet dann die Möglichkeit, sich einen PW-Änderungslink zusenden zu lassen. (Eventuell mit Zeitbegrenzung)
Der Link bringt dich dann auf eine Seite, wo du ein neues Passwort wählen kannst, welches wiederrum md5 verschlüsselt wird.

Was meiner Meinung nach sehr unsicher ist, wäre, dass man sein selbst gewähltes PW zugesendet bekommt.
Wenn jemand Zugriff auf eine Email hat, lässt er sich das PW zusenden und benutzt es - mit Glück - auf anderen Seiten auch noch. Wenn du es so lassen willst, generiere ein neues PW, schreib das in die DB und sende das zu!

Gruß
 
Naja, über die Sicherheit solcher Geheimfragen lässt sich dann auch wieder diskutieren, aber wir wollen hier mal nicht vollständig abschweifen ;)
Passwörter sollten natürlich immer verschlüsselt abgespeichert werden (md5/sha1/irgendeine andere hashfunktion). Die Zeitbegrenzung halte ich für eine gute Idee. Innerhalb einer Stunde kann man, wenn man in der Email einen Bestätigungslink eingibt ein neues Passwort eintippen.
 
Zurück