Geschrieben von sparco am 22.03.2005, 18:00

Das passiert ja oft, das man ein Passwort vergisst. Besonders, wenn man sich ein supergecheimes Passwort ausgedacht hat(man hat ja Angst von Hackern;-))
Und dann ist man ja wirklich erleichtert, wenn die Page eine repasswort System besizt.
So ein System will ich euch auch in diesem Tutorial vorstellen.
Als erstes erstellen wir eine Form, wo der User sein Username eingibt:


<html>
<head>
<title>Fogot Password?</title>
</head>

<body>
<form name="ForgotPassword" method="post" action="forgot_password.php">
<p>Geben sie hier ihr Username an
<input type="text" name="username">
</p>
<p>
<input type="submit" name="Submit" value="Neues Passwort erstellen">
</p>
</form>
</body>
</html>


Wie ihr sieht, schikt die Form die Daten an forgot_password.php. Die erstellen wir jetzt. Das System wir aber anders, als bei manchen
Pages, wo der Passwort erstellt wird, dann wird eine E-mail an den User mit dem neuen Passwort geschiekt wird.
Da hat man ein Problem. Wenn ein 'unguter' Mensch dein Passwort ohne deinen Wissen aendert, ist es schon unangehnem. Das wollen wir aendern. Man gibt das Username ein, eine E-Mail wird an den User geschikt, wo ein Link steht. Nachdem man ihn ancklickt, wird dann erst das neue Passwort erstellt.

<?php
//Die Connect Daten muessen geaendert werden!
$db_host = ''; //Host der Datenbank
$db_user = ''; //User des Mysql Servers
$db_pass = ''; //Passwort des Users
$db = ''; //Datenbank mit den Tabellen
$table ='' //Die Tabelle mit allen Spalten
$email_tab = ''; //Spalte, wo die E-Mail Adressen gespeichert sind
$user_tab = ''; //Spalte, wo alle User gespeichert sind
$pass_tab = ''; //Spalte, wo die Passwoerter der User gespeichert sind
$link_tab = '' //Spalte, wo die verschluesselte links gespeichert sind(muss
//erstellt werden)
$server_mail = '' //Mail Adresse die die Mails mit dem Key Link

$connect = mysql_connect($db_host, $db_user, $db_pass);
mysql_select_db($db);

/* Alle Daten, wo es um MySQL geht */

/*Variablen Daten */

$formed_username = $_POST['username']; //Form Variable
$linked_username = $_GET['linked_username']; //Link Variable
$linked_key = $_GET['linked_key']; //Link Variable

/*Ende der Variablen */

if (isset($formed_username))
{
//Der Zugang wurde durch die Form erstellt, es wird kein Passwort generiert

$mail_account = mysql_query("select $email_tab from $table where $user_tab =
'$formed_username'") or die ("Es gibt keine engetragene Mail Adresse");

//Generieren von einem Link
//Zahl fuer den Schluessel generieren
srand ((double) microtime() * 1000000);
$key = rand(0, 999);
$key = md5($key);
$keyed_result = mysql_query("insert into $table ($link_tab) values ('".$key."')");
$link = "http://dieseite.de/forgot_passwort.php?linked_username=$formed_username&&linked_key=$key";

//Senden der E-Mail
mail($mail_account, 'Sie haben ihr Passwort vergessen', "Sie haben das Forgot Password System aktiviert. Wenn sie wirklich ein neues Passwort anfordern wolen, klicken Sie dieses Link an:$link", "From: $server_mail");

}
elseif(isset($linked_username) || isset($linked_key))
{

//Der User hat Aktivierungs Link besucht, neues Passwor wird generiert

//Die richtigkeit des Link wird ueberprueft!!!
$keyed_result = mysql_query("select * from $table where $user_tab = '$linked_username' and $link_tab = '$linked_key'") or die ("Sie haben keine Rechte, diese Seite zu betreten");
$keyed_result_1 = mysql_query("delete $link_tab from $table where $user_tb = '$linked_username'"):

//Zuffaeliges Wort aus dem Woerterbuch auswaehlen .Ispell Woerterbuch //wird benuzt
$word = ' ';
$dictionary = '/usr/dict/words'; //ispell wortterbuch, path aendern!
$fp = fopen($dictionary, 'r'); or die("Passwort kann nicht erstellt werden");
$size = filesize($dictionary);

//Zueffalige Position im Buch waehlen
srand((double) microtime() * 1000000);
$rand_location = rand(0, $size);
fseek($fp, $rand_location);

//Naechstes wort waehlen, weil das jetzige moeglicherweise nicht voll sein //wird
while (strel($word)<6 || strel($word)>13 || strstr($word, " ' "))
{
if (feof($fp))
fseek($fp, 0); //Wenn das Ende des Buches, das Anfang errreichen

$word = fgets($fp, 80);
$word = fgets($fp, 80);
}
$word=trim($word);

//Eine Zahl zum $word einfuegen
srand ((double) microtime() * 1000000);
$randed_number = rand(0, 999);
$word .= $randed_number;

//Aendern des Passwortes in der Datenbank

$result = mysql_query( "update $table set $pass_tab = password('$word') where $user_tab = '$lnked_username'");

if (!$result)
echo 'Das Passwort kann nicht generiert werden! Versuchen Sie es spaeter';
else
echo "Das Passwort wurde geaendert. Ihr neues Passwort lauten: $word"

//WICHTIG! Das Passwort wird verschluesselt in der Datenbank gespeichert!
}
else
{
echo 'Sie duerfen diese Seite nicht betreten'
}
?>

Einen extra Dank will ich lucas9991 geben, weil der mir eine sehr wichtige Sicherheitsluecke geholfen hat zu beheben. Ich will auch judge danken (fuer seine Ausdauer).

MFG, sparco

Bewertung Anzahl
6
62,5 %
5 Bewertungen
5
37,5 %
3 Bewertungen