Password recovery

Tags:    php mysql

Hej
Jeg er igang med et boligsite og her har jeg endnu ikke fået implementeret et password-recovery-system.
Omkring systemet havde jeg tænkt mig at der på den "normale" loginside vil være et link der hedder glemt password/kodeord og denne fører til en ny side hvor man så vil blive bedt om at skrive sit brugernavn og mailadresse. Dog vil systemet ikke bruge den indtastede mailadresse, men i stedet den der er gemt i databasen. Det vil jeg gøre for at være sikker på at en tilfældig person ikke vil kunne få fat i et brugernavn og så få tilsendt password-recovery til sin egen mailadresse.
Næste skridt er så hvor de får tilsendt en mail med et link til password-recovery, og det er nu jeg er lidt i tvivl om hvad der er bedst at gøre. Jeg kunne jo tage det krypterede password fra databasen og så sende det som en $_GET i URL'en og så via en alternativ loginside bede om brugernavn og email og så logge ind den vej ved blot at hente passwordet fra URL'en. Dog kan denne mulighed udgøre en sikkerhedsrisiko, hvis en bruger finder ud af at det rent faktisk er deres glemte password, der står i adresselinjen,i krypteret form.
Næste mulighed ville være at tilsende en mail med en $_GET igen og denne gang have en seperat tabel i databasen, hvor der oprettes en post så snart en bruger trykker på glemt password/kodeord og så oprettes der en post i en tabel og denne får jo både et id-felt og brugernavnet i krypteret form. Det krypterede brugernavn er så en del af linket. På den side, brugeren bliver præsenteret for, vil de blive bedt om at indtaste brugernavn og nyt password. Når de så trykker på Gem, vil password-recovery-posten i tabellen blive slettet og linket vil derfor blive ugyldigt. Samtidig ændres passwordet i brugertabellen, til det nye password brugeren indtastede.
Men hvad er egentlig den bedste måde at lave et password-recovery-system på?



5 svar postet i denne tråd vises herunder
1 indlæg har modtaget i alt 2 karma
Sorter efter stemmer Sorter efter dato
til at generarer et random pw kan du kigge på http://dk.php.net/shuffle
Fold kodeboks ind/udKode 


en anden random pw function
Fold kodeboks ind/udKode 



dette sender du til brugeren i en mail, krypterer det, og updaterer db med nyt pw.
brugeren logger så ind med det nye pw, og laver det om til noget nyt

til at ændre pw har du vel en function der ser noglelunde sådan ud
Fold kodeboks ind/udKode 






Indlæg senest redigeret d. 01.10.2012 16:49 af Bruger #16075
Hvis du vil undgå at skulle genere links til opsætning af nyt password, kan du også bare generere et unikt nyt password selv og sende det til brugerens mail.
Derefter kan brugeren så logge ind og ændre det selv.



Du kan vel bare bede brugeren om den mail han allerede har givet dig. Så kan han kun modtage sit password den vej - Det er den mest alment benyttede metode.

Du kan enten genere et nyt unikt password, som Rasmus Knudsen foreslår, eller sende et link der inkluderer et unikt "token" der viser brugeren en side hvor han kan indtaste et nyt password direkte - også en alment anerkendt metode.



Det med at genere et nyt password ville være en god idé, men hvordan kan jeg få php til at gøre det?
Når php har lavet et auto-generated password, så gemmes dette i databasen og sendes til brugeren, sammen med et link til loginsiden. Jeg vil godt bruge en anden side til login ved password-recovery, da jeg så kan sende brugerne direkte til ændring af password, i stedet for at sende dem til deres personlige side.



Ok.
Så bliver det nok med generating random password, kryptere dette og gemme i databasen.
Har tjekket at funktionen virker og udskrevet $pw=MakeRandomPassword();, og jeg får hver gang et nyt password.
Takker mange gange for hjælpen.

EDIT: Ahh, var lige lidt hurtig. Havde godt nok fået testet om jeg kunne sende det ud, men ikke når jeg opsætter regler for hvornår den skal gøre hvad:
Fold kodeboks ind/udPHP kode 

Jeg får syntax-error, i min editor, på følgende linjer: 72, 74 og 77



Indlæg senest redigeret d. 02.10.2012 15:56 af Bruger #17072
t