Hva er den beste måten å huske brukere på?

Når man lar brukerne logger inn, er det jo ganske vanlig høflighet å gi dem en «Husk meg på denne maskinen»-boks de kan sette et kryss i for at de skal huskes til neste gang. Hva er, med hensyn til sikkerhet, den beste måten å kode en slik boks på?

Den måten jeg gjør dette på i dag er at jeg lagrer brukernavn og en kryptert variant av passord i cookies. Dersom en bruker går inn på siden og denne ikke er logget inn, sjekkes det automatisk om det ligger innloggingsinformasjon i cookies, og dersom det gjør det (og denne er riktig) blir brukeren logget inn.

Men jeg har forstått det slik etter å ha lest litt her inne at å lagre ting i cookies er særdeles usikkert fordi det er lett for andre å hijacke disse?

Finnes det en bedre måte å gjøre dette på?
 

Nextri

Rebel
Det du kan gjøre for å øke sikkerheten er å sørge for at cookien kun kan brukes på den maskinen som den ble lagret på.
F.eks. at istedenfor at man bare lagrer en hash av passordet, så lager man en hash av
passord + ip + user_agent
det er også blitt vanlig at man også legger ved en såkalt "salt" key som er en random streng med tegn som legges til alle ting man krypterer. det gjør det betydelig vanskeligere å dekryptere.

bruke gjerne også sha1() istedenfor md5() til krypteringen

så slik:
PHP:
$hash = sha1($passord . $_SERVER['REMOTE_ADDR'] . $_SERVER['HTTP_USER_AGENT'] . 'S3cR3t$tr!ng');
 
Det du kan gjøre for å øke sikkerheten er å sørge for at cookien kun kan brukes på den maskinen som den ble lagret på.
F.eks. at istedenfor at man bare lagrer en hash av passordet, så lager man en hash av
passord + ip + user_agent
Hm... Liker ideen, men hvordan vil det påvirke de av brukerne mine som ikke har fast IP?

bruke gjerne også sha1() istedenfor md5() til krypteringen
Problemet er at jeg har en database med over tusen passord i, som alle allerede er kryptert som MD5. Og da er det vel fint lite jeg kan gjøre for å omdanne dette til sha1?
 

Nextri

Rebel
Hm... Liker ideen, men hvordan vil det påvirke de av brukerne mine som ikke har fast IP?
Det vl jo da ikke fungere like bra for dem. Så her må jo fordelen veies opp mot ulempen.
Men å i det minste ha med user agent hjelper jo stort, og gjør d vanskeligere for ondsinnede å stjele cookien til en bruker.
Problemet er at jeg har en database med over tusen passord i, som alle allerede er kryptert som MD5. Og da er det vel fint lite jeg kan gjøre for å omdanne dette til sha1?

ikke noe krise å bruke md5
men det som går an er å lagre passordet på nytt i et nytt felt i databasen, hver gang noen logger inn. hvis dette nye feltet ikke er tomt, er det det som blir benyttet for å sjekke passord. hvis dette feltet er tom, bruker man md5 feltet, og lagrer ny sha1 hash i det nye feltet.

Dermed vil alle som det lagret med md5 fortsatt kunne loggen inn en gang til med md5, for deretter å bli endret til å bruke sha1.

ville da lagret passordet i sha1($passord . 'S3cret'); for å gjøre det mest mulig sikkert.
 
Topp