Wachtwoord vergeten script

Status
Niet open voor verdere reacties.

gast0663

Gebruiker
Lid geworden
13 okt 2011
Berichten
452
Hallo, ik heb een website met een inlog en registratie systeem, alleen nu wil ik nog een systeem erbij,
zodat gebruikers hun wachtwoord kunnen opvragen als ze die vergeten zijn. Dit wil ik dan het liefst door middel
van een email adres invoeren. Heeft iemand zo'n script? Het wachtwoord staat in de database, en is gecodeerd, dus ik
kan de wachtwoorden niet zien.

Alvast bedankt.
 
zet er een nieuwe wachtwoord voor in de plaats.
random gecreeerd uiteraard.
zet een wachtwoordvergeten veld in je db.
als die 1 is dan moet er een nieuw wachtwoord worden ingevoerd.
gebruiker vult nieuw wachtwoord in en dan zet je wachtwoordvergeten weer op 0.

klaar.
 
Oke, maar hoe maak ik dat systeem/pagina dat je het nieuwe wachtwoord moet invullen?
 
Maak een pagina waar je vraagt om het e-mail of de gebruikersnaam,
zodra deze is ingevuld stuur je een link naar het desbetreffende e-mail adres met bijvoorbeeld: ?id=blablabla
voor blablabla moet je dan het ingevulde e-mail adres of gebruikersnaam gecodeerd invullen:
dus jounaam@ditemail.com word dan bijv: 4eac20790fc4ba4237c93fa5b3feff29 (md5).
dus je krijgt een link naar een pagina op je e-mail met: pwreset.php?id=4eac20790fc4ba4237c93fa5b3feff29
als mensen daar dan komen laat je php checken of deze code overeenkomt met een ander e-mail/username die je eerst encrypt zodat ze hetzelfde worden.

klopt dit dan kan hij een nieuw wachtwoord invullen.



dus:

Vraag naar username / email
stuur mail naar desbetreffende e-mail met een link waarin het ID de encoded versie van de username/email is
laat de pagina van die link controleren of deze encrypted matchet met een e-mail / username in de database (die je eerst moet encrypten in je code)

en zo ja laat ze een nieuw wachtwoord invoeren.



Edit:
Hier is de code die ik heb,
er zijn enkele functies zoals $website die heb ik een een andere code definet, maar dat kun je hier zelf wel invullen hoop ik.
Sorry voor de warrige code :D
PHP:
<?

// vergeet de database connectie niet!!
$getpw = $_GET['resetpw'];
$getid = $_GET['id'];
if(isset($_POST['submit2']) == true) {
	$password1 = $_POST['password1'];
	$password2 = $_POST['password2'];
	if($password1 == $password2) {
		$password = md5($password1);
		mysql_query("UPDATE `users` SET `password` = '$password' WHERE `email_code` = '$getpw'");
			echo 'Password changed! <br />';
			echo 'You will be automatically redirected. <br /> if not, click this link: <a href="'.$website.'">'.$website.'</a>';
			echo '<meta http-equiv="refresh" content="5;'.$website.'" />';
	}
	else {
		$_SESSION['error'] = 'Passwords didn\'t match <br /> De wachtwoorden kwamen niet overeen';
		$tothis = "";
		redirect($tothis);
	}
}
elseif(isset($getpw) == true && isset($getid) == true) {
	$emailinfo = mysql_fetch_array(mysql_query("SELECT * FROM `users` WHERE `email_code` = '$getpw'"));
	
	if(isset($emailinfo['email']) == true) {
		if($_GET['id'] == md5($emailinfo['username'])) {
			?>
            <form method="post" action="">
            New Password:<br />
            Nieuw wachtwoord:<br />
            <input type="password" name="password1" />
            <br />
        	Confirm:<br />
            Bevestig:<br />
            <input type="password" name="password2" />
            <br /> <br />
            <input type="submit" name="submit2" value="continue / ga verder / fortsetzen" />
            </form>
            <?
		}
		else {
			echo 'Invalid link! <br />';
			echo 'You will be automatically redirected. <br /> if not, click this link: <a href="'.$website.'">'.$website.'</a>';
			echo '<meta http-equiv="refresh" content="5;'.$website.'" />';
		}
	}
	else {
		echo 'Invalid link! <br />';
		echo 'You will be automatically redirected. <br /> if not, click this link: <a href="'.$website.'">'.$website.'</a>';
		echo '<meta http-equiv="refresh" content="5;'.$website.'" />';
		}
}
else {
	if(isset($_POST['submit']) == true && isset($_POST['e-mail']) == true) {
		$email = $_POST['e-mail'];
		$emailinfo = mysql_fetch_array(mysql_query("SELECT * FROM `users` WHERE `email` = '$email'"));
		if(empty($emailinfo['email']) == true) {
		}
		else {
			$md5user = md5($emailinfo['username']);
			$to = $email;
			$subject = 'Password recovery / reset';
			$message = '
Dear '.$emailinfo['username'].',

If you have lost your password, you can reset it by clicking the link below:
'.$website.'admin/lostpw.php?resetpw='.$emailinfo['email_code'].'&&id='.$md5user.'

Als u uw wachtwoord bent verloren, kunt u het opnieuw instellen door de link hieronder aan te klikken:
'.$website.'admin/lostpw.php?resetpw='.$emailinfo['email_code'].'&&id='.$md5user.'

Kind Regards / Met vriendelijke groet,
The '.$website.' team.
';
			mail($to, $subject, $message, $headers);
			echo 'We have sended you a e-mail with further instructions! <br />';
			echo 'You will be automatically redirected. <br /> if not, click this link: <a href="'.$website.'">'.$website.'</a>';
			echo '<meta http-equiv="refresh" content="5;'.$website.'" />';
			echo '<meta http-equiv="refresh" content="5;'.$website.'" />';
		}
	
	}
	else {
		?>
        <form method="post" action="">
        Enter your E-mail address: 		<br />
        Voer uw E-mail adres in:		<br />
        Geben Sie Ihre E-Mail-Adresse:	<br /><br />
        <input type="text" name="e-mail" />
        <br /><br />
        <input type="submit" name="submit" value="continue / ga verder / fortsetzen" />
        </form>
        <?
	}
}




?>
 
Laatst bewerkt:
martjojo1

Jou script is niet zo veilig. Het probleem begint bij het aanmaken van een unieke code namelijk,

$md5user = md5($emailinfo['username']);

Alleen username.. dat is zeer gemakkelijk aangezien je deze van elke user kan zien Je kan hier bijvoorbeeld nog random getallen bij plaatsen en bijvoorbeeld het ip adres enzo zodat het moeilijk is om het te achterhalen. Daarnaast gebruik je md5 ik zou deze vervangen door bijvoorbeeld sha1 of een andere codering.

Daarnaast zou ik je adviseren om nog een andere code dan alleen de link te gebruiken. bijvoorbeeld alleen getallen.

De link ziet er dan als volgt uit: resetpw.php?code=fd4cef7a4e607f1fcc920ad6329a6df2df99a4e8

Op deze pagina heb je een formulier waarin je het nieuwe wachtwoord kan invoeren en daarbij als extra beveiling nog een code bijvoorbeeld 1SD3ER4(deze code vestuur je ook mee in de e-mail en wordt random aangemaakt). Hierdoor maak je het script nog een stuk veiliger.

Daarnaast is het script gevoelig voor mysql injectie en wordt de oude extenstie mysql nog gebruikt je zou voortaan of PDO of mysqli moeten gebruiken.

Daarnaast zou ik je willen adviseren om data goed te controleren wat in plaats van gewoon accepteren wat iemand invult.
 
Laatst bewerkt:
Oh, oke. Sorry, ik ben nog nieuw met PHP, dus ik snap er niet echt veel van. Het liefst heb ik een compleet script.
 
geeft niet, het beste is door te het zelf te proberen. En dan vragen of het script goed is zoals je het hebt geschreven. Dan leer je er het meeste van!

Je kan het script van martjojo1 gebruiken, maar ik zou deze wel aanpassen zoals ik heb beschreven in mijn reactie op zijn reactie.
 
Als ik dat script van martjojo1 gebruik, krijg ik deze foutmeldingen: Notice: Undefined index: resetpw in /home/a8898940/public_html/pages/lostpass.php on line 4

Notice: Undefined index: resetpw in /home/a8898940/public_html/pages/lostpass.php on line 4
Notice: Undefined index: id in /home/a8898940/public_html/pages/lostpass.php on line 5
 
PHP:
if(isset($_GET['resetpw'])&&isset($_GET['id']))
{
$getpw = $_GET['resetpw'];
$getid = $_GET['id'];
}
zet dit erboven dan zijn die foutmeldingen weg. de get is niet geset normaal.
hoe de rest er dan uit moet zien moet je zelf maar bepalen.
 
Welke mysql velden moet ik aan maken, want hij geeft aan dat een paar velden missen ofzo. Want ik heb geen veld met resetpw. Deze error:

if(isset($_GET['resetpw'])&&isset($_GET['id'])) { $getpw = $_GET['resetpw']; $getid = $_GET['id']; }

Notice: Undefined index: resetpw in /home/a8898940/public_html/pages/lostpass.php on line 12

Notice: Undefined index: id in /home/a8898940/public_html/pages/lostpass.php on line 13
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan