hulp bij wachtwoord vergeten

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Bas van Assen

Bas van Assen

28/09/2014 13:25:27
Quote Anchor link
Hallo iedereen,
ik heb een inlog systeem gemaakt met een functie "wachtwoord vergeten...".
Nu zit ik met een probleem, als je je email adres invult dan wordt er een email naar je emailadres gestuurd met een nieuw cijfer wachtwoord. Alleen kan je dan niet meer inloggen met dat cijferwachtwoord.
Nu had ik de vraag hoe zorg ik dat er een md5 code gemaakt wordt maar de het wachtwoord wel in gewone letters in de mailbox staat? Alvast bedankt voor het antwoord.

Met Vriendelijke Groet, Bas van Assen

(PS: hier de code) ->

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
<?php
error_reporting (0);
$email = $_POST['email'];
$submit = $_POST['submit'];

//connect to the db
$connect = mysql_connect("localhost", "root", "");
mysql_select_db("phplogin", $connect);

if ($submit) {
//I already have created a table named users and two columns(password and email)

//check if email exists

$email_check = mysql_query("SELECT * FROM users WHERE email='".$email."'");
$count = mysql_num_rows($email_check);

if ($count != 0) {
//generate a new password
$random = rand(72891, 92729);
$new_password = $random;

//create a copy of the new password
$email_password = $new_password;

//encrypt the new password
$new_password = md5($newpassword);

//update the db
mysql_query("update users set password='".$new_password."' WHERE email='".$email."'");

//send the password to the user
$subject = "Login Information";
$message = "Your password has been changed to $email_password";
$from = "From: [email protected]";

mail($email, $subject, $message, $from);
echo "Your new password hass been emailed to you.";
}

else {
echo "This email does not exist.";
}

}

?>


titel gewijzigd en e-mailadres gewijzigd.[/modedit]
Gewijzigd op 28/09/2014 14:45:22 door Bas IJzelendoorn
 
PHP hulp

PHP hulp

08/11/2024 15:41:14
 
Wouter J

Wouter J

28/09/2014 13:36:34
Quote Anchor link
Modmelding
Hallo Bas,

Welkom op het forum!

Zou je misschien je topictitel kunnen aanpassen naar een echte titel? Een titel vat je vraag samen en zorgt er zo voor dat mensen met verstand van de vraag je topic snel kunnen vinden. Aan "Help!!!" hebben we niks en het komt alleen opdringerig over.

Alvast Bedankt!
 
Frank Nietbelangrijk

Frank Nietbelangrijk

28/09/2014 14:02:20
Quote Anchor link
md5 is niet veilig meer. Ik stel voor om op zijn minst SHA1 te gebruiken.

In tekst de oplossing:
Als er een nieuwe gebruiker geregistreerd wordt dan bewaar je een versleutelde! versie van het wachtwoord op in de database. Wanneer deze gebruiker inlogt geeft deze zijn wachtwoord in het inlogformulier. In de afhandeling van het formulier wordt het ingegeven wachtwoord wederom versleuteld. het versleutelde wachtwoord wordt dan met de sleutel in de database vergeleken en moet hetzelfde zijn als de gebruiker het juiste wachtwoord heeft ingegeven.

Nu vergeet de gebruiker zijn wachtwoord. In de database hebben we zijn (niet-versleutelde) wachtwoord ook niet. Er zit dus niets anders op dan de gebruiker zelf een nieuw wachtwoord te laten maken - of - we maken een automatisch gegenereerd nieuw wachtwoord en sturen deze per email naar de gebruiker.

Ik prefereer zelf de eerste optie omdat een onbeschermd wachtwoord die per email verstuurd weer erg fraude gevoelig is.
Wanneer je een nieuw wachtwoord hebt ontvangen (net als bij de registratie) dan zet je deze weer versleuteld in de database waarna de gebruiker met het nieuwe wachtwoord kan inloggen.

Om te voorkomen dat iedereen op een willekeurige gebruikersnaam/emailadres een nieuw wachtwoord kan instellen stuur je eerst een linkje naar het email adres van je (juiste) gebruiker. In de link verwerk je een HASH die tevens in de database bij de desbetreffende gebruiker staat.

voorbeeld linkje

www.mijnsite.nl/enterNewPassword.php?hash=weu4rhvfpauewq89r0tq

op dat moment staat in de database:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
id | naam  | email             | password     | hash
--------------------------------------------------------------------
1  | Frank | [email protected] | ab12cd45ef67 | weu4rhvfpauewq89r0tq


waarbij ab12cd45ef67 nog het versleutelde oude password is waarmee nog steeds ingelogd kan worden
en weu4rhvfpauewq89r0tq is de nieuwe hash die is aangemaakt bij het versturen van de email met de link.
Gewijzigd op 28/09/2014 14:14:19 door Frank Nietbelangrijk
 
Ivo P

Ivo P

28/09/2014 14:03:25
Quote Anchor link
dus als iemand jouw mailadres elke 5 minuten invoert in dat wachtwoord-vergeten formpje, dan krijg jij elke 5 minuten een nieuw password?

Lijkt me handiger om een linkje te mailen. (met een random code)
Als de user op die link klikt, weet je dat de persoon in kwestie in elk geval toegang heeft tot de mailbox en zijn ww wilde aanpassen.

Dan geef je hem ofwel vanuit het systeem een nieuw password, of je laat hem zelf 2x een password invoeren wat hij voortaan wil gebruiken.

MAtchen die 2 passwords met elkaar, dan sla je de hash op in de database (en evt mal je hem ook nog even dát zijn password veranderd is. (en niet waarin)

--
min of meer wat Frank ook zegt dus
Gewijzigd op 28/09/2014 14:04:45 door Ivo P
 
Bas van Assen

Bas van Assen

28/09/2014 14:24:40
Quote Anchor link
Sorry, nietbelangrijk,
zou je me misschien een aangepaste php code kunnen geven en een mysql code?
Ben een beginneling en de meeste codes die ik nu programmeer maak ik met hulp van youtube video's. Alvast bedankt voor je antwoord.
 
Bas IJzelendoorn

Bas IJzelendoorn

28/09/2014 14:47:51
Quote Anchor link
Los van je topic:

Houd er rekening mee met de standaard mail() functie dat de mail regelmatig in de spambox kan komen. Je gebruikt namelijk niet de juiste mailheaders. Of kijk eens naar phpmailer of swiftmailer. Dan heb je wat zekerheid dat de e-mail ook daadwerkelijk aankomt.
Gewijzigd op 28/09/2014 14:48:21 door Bas IJzelendoorn
 
Obelix Idefix

Obelix Idefix

28/09/2014 22:50:54
Quote Anchor link
Bas van Assen op 28/09/2014 14:24:40:
zou je me misschien een aangepaste php code kunnen geven en een mysql code?
Ben een beginneling en de meeste codes die ik nu programmeer maak ik met hulp van youtube video's.

Maak je codes of kopieer je? Zag in je andere topic een hele zooi codes en de vraag om het even aan te passen. De bedoeling is dat je zelf wat leert en niet dat het hier kant en klaar wordt aangeleverd. De vergelijking is al vaker gemaakt, dat het hier geen afhaalchinees is. Kortom: investeer tijd en energie om dingen zelf uit te zoeken / te testen /te maken.

Ten aanzien van de code:
Waarom error-reporting uit als je aan het testen bent?
Waarom regel 2/3. Je gaat ten eerste er van uit dat beide waarden bestaan en je maakt onnodige variabelen aan.
Een query met mysql is ondertussen bijna achterhaald. mysql komt te vervallen. Stap over op mysqli of PDO.
Waarom * in je query?
Waar is de controle of je query gelukt is?
Regel 20 t/m 27 is overbodig. Je kunt in de query prima de waarde met een goede beveiliging opslaan en in je mail het onbeveiligde wachtwoord vermelden.
Overigens is je query 'lek'; je gebruikt onbeveiligde invoer van een gebruiker in je query. Wat als daar javascript in staat of kwalijke code om je database te legen, om maar wat te noemen.
En ook hier controleer je niet of de query gelukt is.
Waarom op regel 33 een variabele tussen "" ?
Zoals aangegeven gebruik je de mailfunctie niet goed.
Leer je aan om in te springen, zodat je kunt zien welke { bij } hoort. Nu staat op regel 41 / 43 een } en is niet in 1 oogopslag te zien welke waarbij hoort.

Verder begrijp ik je probleem niet: in de query gebruik je de beveiligde wachtwoord en in je mail zet je het onbeveiligde wachtwoord neer. Als iemand dus probeert in te loggen met het wachtwoord in het mailadres, zou dat gewoon moeten lukken (tenzij de query niet lukt en/of er ergens anders wat fout gaat).
 
Kevin J

Kevin J

06/10/2014 12:32:07
Quote Anchor link
Okay om alleen jou vraag te beantwoorden en alle andere dingen aan de kant te zetten.
Je kan dit heel simpel oplossen
maak eerst een variable met het cijfer wachtwoord als voorbeeld: $nieuwwachtwooord = 12345;
Zorg dat hij dit mailt naar het juiste email, en maak vervolgens er een MD5 van en gooi die in een query voorbeeld:
$md5wachtwoord = md5($nieuwwachtwoord);

mysql_query("UPDATE users SET password='".$md5wachtwoord."' WHERE email='".$email."'");
 
- SanThe -

- SanThe -

06/10/2014 13:33:23
Quote Anchor link
Kevin jager op 06/10/2014 12:32:07:
Zorg dat hij dit mailt naar het juiste email,


Passwords hoor je niet te mailen i.v.m. veiligheidsrisico.
 
Mike van den Hoek

Mike van den Hoek

06/10/2014 14:06:41
Quote Anchor link
Kan je niet beter een veld in database toevoegen genaamd "wachtwoord_vergeten_code" of iets dergelijks. Als de gebruiker zijn wachtwoord vergeten is wordt er een code gegenereerd en in de database geplaatst en naar de gebruiker gemaild. Als de code uit de email gelijk is aan de code in de database mag de gebruiker een nieuw wachtwoord invullen. Als de code niet gelijk is en iemand probeert de hacken laat je een foutmelding zien op de pagina.
Ik heb de code liggen voor je als je hem wilt hebben.
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.