Gå til innhold

Glemt passord funksjon


Anbefalte innlegg

Hvordan kan/bør en implementere en glemt passord funksjon i et CMS?

 

Har en user table med password_hash og slikt, og tenker at dersom noen har glemt passordet sitt, så må de jo kunne få et nytt. og hadde vært kjekt om de kunne be om det selv slik at jeg slapp å gi dem det manuellt. :)

 

Enkleste versjonen er vel felt med epost, og så update table med nytt passord, og sende dette passordet til epost-addressen. Men det store hullet her er jo at jeg da kan være bølle og resette passordet til andre som ikke nødvendigvis trenger å ha glemt passordet sitt akkurat når jeg føler for det :nei:

 

På forum har jeg ofte sett at man får tilsent en kryptisk link på epost. Men vet jo ikke hva som foregår når man går dit.

 

 

Noen som har noe erfaring med dette? Tanker? Ideer? Råd eller vink? Anything?

Endret av Tussi_qwerty
Lenke til kommentar
Videoannonse
Annonse

Hva med at når brukeren trykker glemt passord, så oppretter du en unik hash ( http://no2.php.net/uniqid ) i databasen. Denne forblir i databasen i f.eks. 24 timer.

Så sender du en link til mailadressen, med denne hashen som parameter i linken. Dersom denne siden blir besøkt, resettes passordet til brukeren og brukeren får ett nytt passord på mail. Dersom ikke linken blir besøkt innen de 24 timene, vil den være ugyldig og ingen ting vil skje med brukerpassordet.

Lenke til kommentar

nazgul: tenkt litt på det ja. men hvordan kan en få noe til å bli ugyldig etter 24 timer? er det noen måte få noe til å automatisk forsvinne etter 24 timer? må vel ha et datetime felt eller noe det sjekkes opp mot da kanskje. denne user tablen min begynner å bli noe stor :p vil det fungere å ha dette som et table ved siden av? med userid, hash og tidspunkt hashen ble opprettet for eksempel? og så kan man jo gå igjennom det tablet kun i sammenheng med denne glemt passord saken... tenker det blir litt stress å for hver gang noen logger seg inn for eksempel å skulle sjekke om noens hash er for gammel..

 

mats-dani: det er jo sant, men tror du ikke at du ville blitt noe frustrert hvis du fikk nytt passord på diskusjon.no 17 ganger om dagen? :p

 

som random passord script tenker jeg at jeg bruker sha1(uniqid(rand(), true)) eventuelt bytte ut sha1 med md5. og så bare trekke ut for eksempel de 5-7 første. men hvis nå denne hashen som blir sent til mail, og dem går til denne linken, så kan du jo kanskje bare få lov til å skrive inn et eget et med en gang? ellers så blir det jo, epost med hash, gå til side med hash, epost med passord, logge seg inn med passord, bytte passord. istedet for epost med hash, bytte passord, logge seg inn. eller no. Noen åpenbare sikkerhetshull i dette her? hvis man ser bort i fra at noen har tilgang til eposten din seff :p

Endret av Tussi_qwerty
Lenke til kommentar
Men gjeldene person får jo passordet per. mail uansett!

Du kan jo ta et random passord script som først sendes med mail() også setter du passordet inn som hash med f.eks. sha1() eller md5().

Anbefaler sha1() og begge er et enveis hash, legg gjerne til litt salt og pepper

8068912[/snapback]

Hele poenget er jo å unngå at passordet blir endret før brukeren faktisk vil det. Ellers kan det fort ende med at man endrer passord ufrivillig en del ganger om dagen...

 

nazgul: tenkt litt på det ja. men hvordan kan en få noe til å bli ugyldig etter 24 timer? er det noen måte få noe til å automatisk forsvinne etter 24 timer? må vel ha et datetime felt eller noe det sjekkes opp mot da kanskje. denne user tablen min begynner å bli noe stor :p vil det fungere å ha dette som et table ved siden av? med userid, hash og tidspunkt hashen ble opprettet for eksempel? og så kan man jo gå igjennom det tablet kun i sammenheng med denne glemt passord saken... tenker det blir litt stress å for hver gang noen logger seg inn for eksempel å skulle sjekke om noens hash er for gammel..

 

mats-dani: det er jo sant, men tror du ikke at du ville blitt noe frustrert hvis du fikk nytt passord på diskusjon.no 17 ganger om dagen? :p

 

som random passord script tenker jeg at jeg bruker sha1(uniqid(rand(), true)) eventuelt bytte ut sha1 med md5. og så bare trekke ut for eksempel de 5-7 første. men hvis nå denne hashen som blir sent til mail, og dem går til denne linken, så kan du jo kanskje bare få lov til å skrive inn et eget et med en gang? ellers så blir det jo, epost med hash, gå til side med hash, epost med passord, logge seg inn med passord, bytte passord. istedet for epost med hash, bytte passord, logge seg inn. eller no. Noen åpenbare sikkerhetshull i dette her? hvis man ser bort i fra at noen har tilgang til eposten din seff :p

8068975[/snapback]

Burde fungere fint, men pass på å bruke èn funksjon for oppretting av passord/hash osv. Ellers kan det fort ende med at du må gjøre store endringer i koden din dersom du velger f.eks. å gå fra md5- til sha1-hash i passordene.

Personlig ville jeg nok godt for to-mailsvarianten, for å ha minst mulige plasser der jeg må sjekke user-input, men det er vel hipp som happ egentlig.

 

 

Ang. hvordan få noe til å være gyldig i 24 timer er bare å bruke et TIMESTAMP-felt og sjekke opp mot dette, evt. bare et strengefelt der du putter inn verdien av time() (fra php) og sjekker at differansen mellom dette og time() (kalles når brukeren besøker siden) er mindre eller like 60*60*24. I samme scriptet kan du f.eks. slenge inn litt opprydding som fjerner utgåtte hasher.

Endret av Nazgul
Lenke til kommentar
Hva med at brukeren må oppgi f.eks. de to siste sifferene i fødsels nummeret.

Det må oppgis når nytt passord skal sendes?

8069212[/snapback]

Da er du nødt til å lagre fødelselsnummer fra starten av, eller deler av det. Usikker på om dette er lov uten tillatelse fra datatilsynet, du har ihvertfall ikke lov til å lagre hele, og da forsvinner vel litt av poenget med å bruke fødselsnummer uansett. (Å lagre dette kun i tilfelle brukeren glemmer passordet er litt drøyt)

Førerkortnummer kunne kanskje blitt brukt, men faller for samme argument som fødelsnummer. Hva skal du med det utenom å sende nytt passord?

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...