Wachtwoord vergeten functie maken

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Patrick vd Pols

Patrick vd Pols

14/06/2012 14:29:13
Quote Anchor link
Hoi Allemaal,

Ben nog bezig met mijn artikel scriptje. Alles werkt opzich naar behoren, alleen wil ik er nu nog een functie bij maken waarin je je wachtwoord kan veranderen. De wachtwoorden van gebruikers staan opgeslagen als SHA1, dus direct het wachtwoord mailen gaat niet. Ik heb al gezocht naar tutorials, maar kom alleen tutorials tegen waar de wachtwoorden niet gehasjd zijn. Heeft iemand voor mij een goeie tutorial hier voor of kan iemand mij de stappen uitleggen die ik moet doorlopen? Denk dat ik er dan aardig uit moet komen.


Alvast bedankt!
 
PHP hulp

PHP hulp

15/05/2024 00:34:32
 
Erwin H

Erwin H

14/06/2012 14:31:50
Quote Anchor link
Niet het wachtwoord opsturen, maar een nieuw wachtwoord maken (random) en dat samen met een bevestigingscode opsturen naar de gebruiker. Die zal dan feitelijk hetzelfde proces doormoeten als bij het aanmelden.
Gewijzigd op 14/06/2012 14:40:33 door Erwin H
 
- Ariën  -
Beheerder

- Ariën -

14/06/2012 14:32:13
Quote Anchor link
Wat dacht je van een nieuw wachtwoord sturen ;-)?

Als je de werkelijke waarde van SHA1 zou kunnen terughalen zou heel SHA1 onnodig zijn geweest ;-). Dus gelukkig maar dat SHA1 one-way encryption is.
 
Patrick vd Pols

Patrick vd Pols

14/06/2012 14:36:28
Quote Anchor link
@ Aar,

Emailadres is bij mij gelijk de username, dus ik neem aan dat ik dan ook nog iets moet checken of bijv voornaam overeenkomt met het emailadres, en zoja een nieuw wachtwoord sturen, of zit ik er naast?

@ Erwin,

De manier van Aar lijkt me simpeler, maar zit hier nog veel verschil in qua veiligheid?
 
Erwin H

Erwin H

14/06/2012 14:40:07
Quote Anchor link
Wat Aar zegt is hetzelfde als wat ik zeg, hij zegt het alleen iets anders.
De bevestigingscode heb je overigens niet nodig, dat is meer voor het aanpassen van emailaddressen, niet voor passwords. Mijn fout.
 
Patrick vd Pols

Patrick vd Pols

14/06/2012 14:40:44
Quote Anchor link
Oke bedankt voor de reacties. Ik ga er wel uit komen zo denk.

Thanks!

Toevoeging op 14/06/2012 15:56:08:

Oke het is me gelukt met jullie advies!

Hieronder de code :
Functie om een random string te maken :
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
<?php
function ranpass($len = 8){
  $pass = NULL;
  for($i=0; $i<$len; $i++) {
   $char = chr(rand(48,122));
   while (!ereg("[a-zA-Z0-9]", $char)){
     if($char == $lchar) continue;
     $char = chr(rand(48,90));
   }

   $pass .= $char;
   $lchar = $char;
  }

  return $pass;
}


?>


En het updaten/mailen van het wachtwoord:

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
<?php if ( 'POST' == $_SERVER['REQUEST_METHOD'] )
{

    $voornaam = mysql_real_escape_string($_POST['voornaam']);
    $emailadres = mysql_real_escape_string($_POST['emailadres']);
    $check = mysql_query("SELECT * FROM users WHERE voornaam = '$voornaam' AND emailadres = '$emailadres'");
    
    if (mysql_num_rows($check) == 1)
    {

        // Gebruiker bestaat, wachtwoord aanmaken en mailen
        
        $newpass = ranpass(); // Wachtwoord aanmaken
        $insertpass = sha1($newpass);
        
        mysql_query("UPDATE users SET wachtwoord = '$insertpass' WHERE emailadres = '$emailadres'");
        
        echo "<p>We hebben een nieuw wachtwoord voor je ingesteld. Deze is per email naar je verzonden.</p>";
        
        $mssg = "We hebben een nieuw wachtwoord voor je ingesteld.\n Wachtwoord : $newpass \n\n Met vriendelijke groeten, \n $sitenaam \n $siteurl";

        mail($emailadres, "Nieuw wachtwoord", $mssg, "From: $sitenaam<$sitemail>");
        
    }

    else
    {
        echo "<p>Voornaam/Emailadres combinatie komt niet overeen. We konden je daarom geen nieuw wachtwoord sturen.</p>";
        ShowWachtwoordForm();
    }
    
    
    
}

else
{
    ShowWachtwoordForm();
    
}
?>


Toevoeging op 14/06/2012 16:04:55:

Ik hoop overigens wel dat het veilig is zo, ben namelijk nog maar een PHP beginner.
 
Jan terhuijzen

jan terhuijzen

14/06/2012 16:24:17
Quote Anchor link
Dit is echter wel fout. Je gebruikt variabelen in quotes in je query.
Kijk naar regel 5.
dat moet niet dit zijn
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
$check = mysql_query("SELECT * FROM users WHERE voornaam = '$voornaam' AND emailadres = '$emailadres'");

Maar dit:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
$check = mysql_query("SELECT * FROM users WHERE voornaam = '".$voornaam."' AND emailadres = '".$emailadres."'");
 
Patrick vd Pols

Patrick vd Pols

14/06/2012 16:25:09
Quote Anchor link
Wat is het verschil? Het werkt toch precies hetzelfde?
 
Obelix Idefix

Obelix Idefix

14/06/2012 16:43:05
Quote Anchor link
ereg: This function has been DEPRECATED as of PHP 5.3.0. Relying on this feature is highly discouraged

Waarom variabelen kopiëren?
Bewerking/beveiliging in query.
Foutafhandeling van je query mist.
php --> (echo) ' en in html " gebruiken.
mail; geen foutafhandeling. Headers missen. Gebruik liever phpmailer of swiftmailer

voor beveiliging niet alleen vertrouwen op sha1, maar liever salt (+ pepper) toevoegen.
 
Patrick vd Pols

Patrick vd Pols

14/06/2012 16:48:11
Quote Anchor link
Oke dat gaat me dus al weer een tikje te ver:p
Variabelen kopieren doe ik omdat ik dit voor mijzelf wat fijner vind werken, maar als dit not-done is zal ik het weghalen.

De query word alleen uitgevoerd als daadwerkelijk het emailadres en naam overeenkomt, hier kan dan toch weinig fout aan gaan, toch?

php --> (echo) ' en in html " gebruiken. , wat bedoel je hier precies mee?

Over phpmailer, ga ik even onderzoeken, evenals de salt en pepper.
 
Jan terhuijzen

jan terhuijzen

14/06/2012 18:33:46
Quote Anchor link
Je moet de mysql_query in een variabele zetten en kijken of hij geen false terug geeft, als hij dus geen false terug geeft is de query gelukt. als de query wel false terug geeft kun je een foutmelding echo'en. Dit is een simpele maar goede manier van fout afhandelen.
 
Obelix Idefix

Obelix Idefix

14/06/2012 22:50:30
Quote Anchor link
Patrick vd Pols op 14/06/2012 16:48:11:
Variabelen kopieren doe ik omdat ik dit voor mijzelf wat fijner vind werken, maar als dit not-done is zal ik het weghalen.

Het is meer uit praktisch oogpunt. Omdat jij een variabele kopieert (en bewerkt) zul jij later in het script niet meer weten of het nu gaat om input vanuit bv een form of dat het gaat om bv een variabele die voortkomt uit bv een select-query.

Patrick vd Pols op 14/06/2012 16:48:11:
De query word alleen uitgevoerd als daadwerkelijk het emailadres en naam overeenkomt, hier kan dan toch weinig fout aan gaan, toch?

Je query wordt altijd uitgevoerd; de controle vindt plaats in de query.
[/quote]

Patrick vd Pols op 14/06/2012 16:48:11:
php --> (echo) ' en in html " gebruiken. , wat bedoel je hier precies mee?

HTML gebruikt " bv <a href="link_naar_pagina.html">
Bij php is het, daarom, vaak handiger om in echo ' te gebruiken.

t.a.v. variabelen buiten quotes: http://www.pfz.nl/wiki/variabelen-buiten-quotes/
 



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.