Gå til innhold

Session og "remember me"-funksjonalitet


Anbefalte innlegg

Kanskje på tide at vi får et litt mer avansert tema her. Okey, greia er den at jeg funderer litt på hvordan man lager en optimal session-manager og "remember me"-funksjonalitet med tanke på sikkerhet. Som endel forhåpentligvis veit tar den innebygde session-manageren i PHP bare av seg "low level"-delen og overlater "finjusteringen" til programmerer med det resultatet at endel går rett i baret og har session-manager som har flere hull enn en sveitserost :wee: Vel, vel, det jeg vil frem til er hvordan folk her gjør det med session. Selv pleier jeg å dytte session sammen med IP og browser inn i db og sjekker dette opp for hver side. Fungerer, men glemmer stort sett at jeg kanskje bør generere ny id nå og da.

 

Så var det det andre og litt mer intressante problemet, eller kanskje mareritt er mer passende? "Remeber me". Her er det veeeeeeldig lett å gå på en bommert. Det mest vanlig er vel å kjøre ut to stk cookie, en med brukerid og en med passordet i hashet form. Her gir man potensielt fremmende brukere muligheten til å logge seg inn uten å kjenne passordet, og det ikke bare for en kort periode, men potensielt så lenge brukeren ikke endrer passordet. Dette kan vel ikke akkurat kalles sikkert i og med at enkelte kan finne på å logge seg inn med slikt selv på offentlige maskiner. Noen som har forslag på hvordan forbedre dette?

Endret av Ernie
Lenke til kommentar
Videoannonse
Annonse
Gjest Slettet+142

Til "husk meg".. - Når en bruker registrerer seg på siden, blir en unik id lagret i databasen. Husk-Meg funksjonen kan da lagre brukerid, passordhash OG unik id i en cookie?

Har aldri prøvd dette, "lenge"(3-4 mnd) siden jeg har laget noe side med logg inn-funksjonalitet på(har kun laget små koder til meg selv)..

Men det kan jo være en idé, eller? :)

 

Ellers tør jeg ikke snakke ut om sessions :p

Lenke til kommentar
Akkurat det med sessions skal jeg ikke utale meg om.

Men "husk meg" greiene, hvorfor ikke sjekke hvordan phpbb har gjort det? Når sååå mange bruker det så må det nesten være sikker måte de har brukt?

9266849[/snapback]

Fordi det er en løsning jeg sterkt misliker. Ikke bare sender man ut passordet til en maskine vedkommende ikke trenger å eie, men får du labbene i de cookiene som blir satt så er du nesten garantert å kunne logge deg inn hvor som helst og når som helst. Er løsningen slapp nok kan man til og med ta over hele kontoen ved å endre email og passord. Det er ikke mye sikkerhet.

 

 

Til "husk meg".. - Når en bruker registrerer seg på siden, blir en unik id lagret i databasen. Husk-Meg funksjonen kan da lagre brukerid, passordhash OG unik id i en cookie?

Har aldri prøvd dette, "lenge"(3-4 mnd) siden jeg har laget noe side med logg inn-funksjonalitet på(har kun laget små koder til meg selv)..

Men det kan jo være en idé, eller? :)

 

Ellers tør jeg ikke snakke ut om sessions :p

9268041[/snapback]

Det løser jo ingen problemer egentlig. Man sender fortsatt ut brukerid + brukerens passord, og klart man kan jo legge inn salt i passordet (noe man også bør), men i teoriene gir man uvedkommende mulighet til å finne ut brukernavnet og passordet til en eller annen person. Uannsett løser det ikke det problemet at du kan logge deg inn når som helst og hvor som helst straks du får tak i de cookiene.

Lenke til kommentar

Denne siden kan være verdt en liten titt

 

Creating a Secure PHP Login Script

 

Edit: Her er en tråd hvor bl.a artikelen over blir diskutert, og litt annet om login sikkerhet

Basic advice needed for login methods/security

Fra tråden over:

It's a bit pricey for its size, but there is a lot of good information in Essential PHP Security by Chris Shiflett.
Endret av crowly
Lenke til kommentar

Du kan jo evt lagre ipen i databasen på serveren, så når du sjekker om remember me cookiene så sjekker du også at forespørselen kommer fra den ipen, da blir det med en gang en del sikrerer. Du bør aldri velge remember me på offentlige pcer uansett så.

Lenke til kommentar
Denne siden kan være verdt en liten titt

 

Creating a Secure PHP Login Script

 

Edit: Her er en tråd hvor bl.a artikelen over blir diskutert, og litt annet om login sikkerhet

Basic advice needed for login methods/security

Fra tråden over:

It's a bit pricey for its size, but there is a lot of good information in Essential PHP Security by Chris Shiflett.

9268710[/snapback]

Takk, skal ta en titt på det.

 

 

Du kan jo evt lagre ipen i databasen på serveren, så når du sjekker om remember me cookiene så sjekker du også at forespørselen kommer fra den ipen, da blir det med en gang en del sikrerer. Du bør aldri velge remember me på offentlige pcer uansett så.

9268736[/snapback]

Jeg veit det og mange andre veit det også, derimot finnes det nok av folk som ikke veit det eller ved et uhell velger "remember me". Dessuten finnes det de forumene som merkverdig nok har "remember me" satt på som default. Et eksempel er det forumet vi er på nå ...
Lenke til kommentar

Her er måten jeg alltid har gjort det på. Kan være interessant å få tilbakemeldinger på den.

 

Når bukere logger inn og har huket av for "Husk meg til jeg logger ut" skjer følgende:

 

- Jeg genererer et tilfeldig nummer/kode.

- Lagrer ip og den tilfeldige koden til brukeren i databasen.

- Setter en cookie med brukerid og den tilfeldige koden (liker ikke å sette passord i cookies, verken hasher eller klartekst).

- Når da en ny bruker kommer til siden sjekker jeg om han har den cookien og har han det sjekker jeg om brukerid stemmer med den tilfeldige koden samt ip adressen.

 

Den klare ulempen er jo at det funker dårlig på laptoper som logges på nett hjemme, skole, jobb osv..

Lenke til kommentar
Gjest Slettet+142

Liker ikke løsninger som inkluderer sammenligning av ip jeg. Mange som har dynamisk ip, som du nevnte i laptop-setningen din..

Ellers kan du evt. bytte ut ip med en unik tilfeldig hash? ;D

Lenke til kommentar
Liker ikke løsninger som inkluderer sammenligning av ip jeg. Mange som har dynamisk ip, som du nevnte i laptop-setningen din..

Ellers kan du evt. bytte ut ip med en unik tilfeldig hash? ;D

9270774[/snapback]

 

Jeg er fullstendig enig med deg. Løsningen fungerer forsåvidt greit også uten å sjekke ip. En tilfeldig hash blir vel som den koden jeg har satt.

Lenke til kommentar

Hvis man virkelig går inn for det kan man forsåvidt logge de siste subnettene brukeren har logget inn fra og godkjenne alle ip adresser derfra om brukerid og kode fra cookien stemmer..

 

Ulempen med det er at det sansynligvis er som å skyte mygg med kanon. :)

Endret av astrox
Lenke til kommentar
Hva med å lagre useragent i databasen og sjekke at man har samme som sist i stedet for å sjekke IP?

9271083[/snapback]

 

Det var ikke dumt, men det blir noe tilsvarende det jeg gjør med den tilfeldige koden.

Endret av astrox
Lenke til kommentar
Liker generelt ikke å bruke noe "remember me" teknikk over hodet. Mye sikrere å bare la de skrive inn passord eller hva de skal hver gang de kommer inn. Mindre plass for brukerfeil også :)

9274512[/snapback]

 

Tja.. er det virkelig noe stort problem at "remember me" funksjonalitet blir misbrukt? Greit nok, driver du nettbank så er føre-var prinsippet viktig, men sånne ola-dunk forum sider kan godt huske meg :-)

Lenke til kommentar
  • 3 måneder senere...
  • 3 måneder senere...

Jeg satt og tenkte på dette. Går dette an: Når han logger seg inn og skal huskes så lagrer jeg to cookies, den ene har et bestemt navn og den andre har et helt unikt navn. Den cookien med et bestemt navn har en ID verdi på en bruker, som kun brukes i denne sammenhengen ved automatiskinnlogging. Når man leser cookie med fast navn så prøver PHP å hente den unike cookie navnet fra brukeren som da er lagret i databasen. Hvis den kan hente den, woila! Han er den rette. Er det noe gale så kanskje man lage en warning til bruker at noen har forsøkt seg på noe tullball! Går dette? Hva tenker dere? Dumt? Usikkert? Jeg ser ingen feil med det. Men nå er jeg veldig uskarp på dette… :( Og man kan kanskje slenge inn noe user_agent mat også!

Lenke til kommentar

Sånn jeg gjør det med husk meg er at jeg setter en cooki, den får en random md5 verdi.

 

Denne settes også inn i databasen og linkes opp mot passord og burker navn. Hver gang men åpner siden blir den fornyet og en nye cooki satt.

 

Det er sikkert ikke så veldig sikkert, men jeg trenger ikke så utrolig høy sikkerhet enda.

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...