Door
Dirk Renes
op 29-11-2011 14:34
gewijzigd op 01-12-2011 09:04
4.899 views
Ik wil bij mijn login script ook de mogelijkheid hebben dat mensen hun wachtwoord kunnen opvragen als zij die vergeten zijn. Ik heb heb mijn wachtwoorden beveiligd met de functie salt, alleen hoe kan ik nu het beste van de persoon die zijn wachtwoord kwijt is hem via een email zijn gegevens sturen inclusief het decrypten van zijn wachtwoord.
Het moet zoals hieronder vermeld:
Ik heb er toch voor gekozen om het via een link te doen, dus gebruikers voegen hun gebruikersnaam en email in en vervolgens krijgen ze een link die 24 uur actief is, vervolgens drukken ze op die link en krijgen ze een nieuw wachtwoord toegestuurd. hoe ga ik dit realiseren.
Je maakt eerst een formuliertje waar men zijn username en mailadres in moet vullen. Als deze gecontroleerd zijn, genereer je een hash, welke je in de database opslaat. Ook stuur je deze hash mee in een linkje die je naar de gebruiker mailt.
Als de hash-overeenkomt, dan laat je de gebruikers een nieuw password instellen, en als dat gebeurt is, dan verwijder je weer die hash uit je database (waarmee het linkje niet meer zal werken).
Et voila....
Klikt simpel heb je een voorbeeldje van een scriptje dat ik me kan inbeelden met die link
wijzig_wachtwoord.php [sub](aanroep met bijv. wijzig_wachtwoord?hash=7s67sd8af6sd8f6sd6s)[/sub]
<?php
if(isset($_GET['hash'])) {
// hier verder met een controle of de hash klopt.
// in dat geval: toon het wachtwoord wijzig scherm.
} else {
echo "Er is geen hash meegegeven in de URL";
}
?>
Natuurlijk kan je ook voor alles één wachtwoord-pagina aanmaken i.p.v. het script over meerdere bestanden te verdelen, zoiets als:
wachtwoord_wijzigen.php?actie=aanvragen
wachtwoord_wijzigen.php?actie=aanpassen
Waarom onnodig variabelen aanmaken (zowel bij $_POST als op regel 49-55?
empty (b)lijkt geen juiste manier om te kijken of een variabele is gevuld.
Waar om is je controle of gebruiker en mailadres overeenkomen?
Mis beveiliging bij je update-query.
Mis foutafhandeling bij je query
Na header wordt volgens mij exit; geadviseerd.
Gebruik je ook nog een salt?
Maak een select query waarin je de voorwaarden meegeeft.
Er zijn twee mogelijkheden: of bestaat of bestaat niet.
Als bestaat volgt er 1 rij, anders bestaat de combinatie niet.
Als niet bestaat --> melding 'uw gegevens zijn onbekend'.
Als bestaat --> link sturen.
<?php
if(empty($gebr) || empty($email))
{
echo 'U bent iets vergeten in te vullen';
?>
Hier check je of de gegevens zijn ingevuld (waarbij je de POST variabele niet controleert of die bestaan dus je script zou al eerder over zijn nek kunnen zijn gegaan). Maar omdat er geen } achter staat, staat het hele volgende blok binnen het if statement. Dus je hele check op bestaande gegevens wordt alleen uitgevoerd als er gegevens ontbreken..... volgens mij klopt dat niet helemaal.
<?php
if(empty($gebr) || empty($email))
{
echo 'U bent iets vergeten in te vullen';
?>
Hier check je of de gegevens zijn ingevuld (waarbij je de POST variabele niet controleert of die bestaan dus je script zou al eerder over zijn nek kunnen zijn gegaan). Maar omdat er geen } achter staat, staat het hele volgende blok binnen het if statement. Dus je hele check op bestaande gegevens wordt alleen uitgevoerd als er gegevens ontbreken..... volgens mij klopt dat niet helemaal.
Dit probleem is nu opgelost, die if staat nu los. nu krijg ik dus als ik niks invul dat de gegevens niet overeenkomen of leeg zijn.