/ Forside / Teknologi / Udvikling / PHP / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
PHP
#NavnPoint
rfh 3959
natmaden 3372
poul_from 3310
funbreak 2700
stone47 2230
Jin2k 1960
Angband 1743
Bjerner 1249
refi 1185
10  Interkril.. 1146
"Husk mig"-funktion ved log-in på privat s~
Fra : Stig Sørensen


Dato : 16-05-09 08:47

Hej gruppe.

Er igang med at lave en privat familieside, hvor kun en hel familie
har adgang.
Selve login kører med SESSIONS.

Mit problem er dog at så snart browseren er lukket ned, bliver en
bruger udelukket.
Så jeg skal vel igang med noget cookies. Da det kun er en privat
familieside _kunne_ jeg vel blot have krypteret brugernavn og kodeord
i cookien og så auto-logge ind af den vej.

Men jeg vil gerne gøre det rigtige, og kom så til at tænke, hvordan
filan gør man egentligt?
Jeg tænkte så at den "rigtige" måde at gøre det på, var at når man
loggede ind blev der i en database indsat et langt tilfældigt tal/ord.
Samme tal/ord streng i en cookie på brugerens pc. Og næste gang han
kom forbi tjekker man for cookie, og slår den lange streng op i
databasen og får brugerid'et ud fra databasen. Men denne cookie kan
vel egentligt blot kopieres over til en anden maskine og så har denne
fuld adgang med den anden brugers login?

Uanset hvad jeg putter i en cookie kan jo ses på een eller anden måde.
Så hvordan laver man egentligt en sikker husk-mig funktion med
SESSIONS og cookies?

Har Googlet men ikke fundet det jeg søgte.

Skulle det vise sig at være for kompliceret, så vil jeg blive glad for
en simpel løsning også, som ville kunne bruges på denne privat
familiesite.

På forhånd mange tak.

 
 
Dan Storm (16-05-2009)
Kommentar
Fra : Dan Storm


Dato : 16-05-09 18:40

Stig Sørensen skrev:
> Skulle det vise sig at være for kompliceret, så vil jeg blive glad for
> en simpel løsning også, som ville kunne bruges på denne privat
> familiesite.


Når nu folk har en mulighed for at logge ind, kan du jo lige så godt
benytte de informationer du har.



<?php

// tilfælig streng du fastsætter
$secret = "hdkwpwe739$$5..3";

//md5 krypter brugerens oplysninger
$con = md5($secret.$brugernavn.$brugerid.$email);

//smid det i en cookie sammen med et brugerid for at lette processen
setcookie("autologin", $value, (time()+(3600*24*7*31));
$_COOKIE["autologin"]["con"] = $con;
$_COOKIE["autologin"]["brugerid"] = $brugerid;

?>

Når du så skal checke den, så har du en funktion der gør noget ala:

<?php

function checkAutologin()
{
$secret = "hdkwpwe739$$5..3";
$cBrugerid = $_COOKIE["autologin"]["brugerid"];
$cCon = $_COOKIE["autologin"]["con"];

//sql eller funktion til at hente brugernavn, brugerid og email fra
$cBrugerid
$con = md5($secret.$brugernavn.$brugerid.$email);
if($con == $cCon)
return true

return false;


}

?>

Det skal selvfølgelig tilpasses og kan også gøres mere elegant, men
ideen er der og det er sikkert nok.

$secret ville nok skulle angives som en konstant eller en global
variabel, istedet for usikkerheden i at have to variabeler til samme
brug to forskellige steder.

--
Dan Storm - storm at err0r dot dk / http://err0r.dk

Tro ikke brugerne vil gøre noget for at undgå dit killfilter
- Så vigtig er du heller ikke!

Stig Johansen (16-05-2009)
Kommentar
Fra : Stig Johansen


Dato : 16-05-09 19:48

Stig Sørensen wrote:

> Men denne cookie kan
> vel egentligt blot kopieres over til en anden maskine og så har denne
> fuld adgang med den anden brugers login?
>
> Uanset hvad jeg putter i en cookie kan jo ses på een eller anden måde.
> Så hvordan laver man egentligt en sikker husk-mig funktion med
> SESSIONS og cookies?

HTTP er stateless, så SESSIONS er blot en cookie, der refererer til et eller
andet session management system, memory baseret eller DB baseret.

Da cookien bliver sendt frem og tilbage, så kan 'man' se den, som du
skriver.
Bortset fra, det er lidt svært at kopiere[1] en cookie fra f.eks. min
maskine til din maskine, så kan du sikre det yderligere ved at kombinere
den med IP adressen, måske udvidet med UserAgent hvis man er lidt paranoid.

[1] Hvis man ikke har fysisk adgang til begge maskiner.

--
Med venlig hilsen
Stig Johansen

Michael Rasmussen (16-05-2009)
Kommentar
Fra : Michael Rasmussen


Dato : 16-05-09 20:18

On Sat, 16 May 2009 20:47:55 +0200
Stig Johansen <wopr.dk@gmaill.com> wrote:

> Bortset fra, det er lidt svært at kopiere[1] en cookie fra f.eks. min
> maskine til din maskine, så kan du sikre det yderligere ved at kombinere
> den med IP adressen, måske udvidet med UserAgent hvis man er lidt paranoid.
>
Den helt paranoide version er, at kæde session id sammen med et
one-time-token. Til hvert request genereres et token, der gemmes i
$_SESSION. Et token kasseres efter hver request/response. Ideen er, at
klienten skal medsende det gemte token i næste request. Tokens
genereres ud fra en aftalt algoritme, og nøgle aftales ved første
request. Alternativt kan man vælge, kun at kommunikere via https -
https indebærer at information i cookies sendes krypteret.

--
Hilsen/Regards
Michael Rasmussen
http://pgp.mit.edu:11371/pks/lookup?op=get&search=0xE3E80917
A computer is like air conditioning: it becomes useless when you open
windows.


Stig Johansen (17-05-2009)
Kommentar
Fra : Stig Johansen


Dato : 17-05-09 07:21

Michael Rasmussen wrote:

> Den helt paranoide version er, at kæde session id sammen med et
> one-time-token.

Ja, eller implementere en HTTP-proxy over en SSH-tunnel med key-auth only.
Men så er vi vist lidt ude på overdrevet i forhold til at beskytte et
familiealbum.

--
Med venlig hilsen
Stig Johansen

Stig Sørensen (18-05-2009)
Kommentar
Fra : Stig Sørensen


Dato : 18-05-09 08:40

On May 16, 7:40 pm, Dan Storm <shadyz_REMOVETH...@err0r.dk> wrote:

> // tilfælig streng du fastsætter
> $secret = "hdkwpwe739$$5..3";
>
> //md5 krypter brugerens oplysninger
> $con = md5($secret.$brugernavn.$brugerid.$email);
>
> //smid det i en cookie sammen med et brugerid for at lette processen
> setcookie("autologin", $value, (time()+(3600*24*7*31));
> $_COOKIE["autologin"]["con"] = $con;
> $_COOKIE["autologin"]["brugerid"] = $brugerid;

Hej Dan.

Jeg har følgende:

$secret_password = "sJ2N8dHu03dJmc8sHDkjSh8Shkd28103jD";
setcookie('autologin', 1, time()+(60*60*24*31));
$_COOKIE['autologin']['user_id'] = $_SESSION['user_id'];
$_COOKIE['autologin']['login'] = md5($secret_password . $_SESSION
['username'] . $_SESSION['email]);

Mit problem er at cookien kun bliver skabt med setcookie, men de
efterfølgende to linjer der tilføjer bruger id, samt det krypteret
kodeord kommer ikke med.
print_r($_COOKIE); får jeg blot:

Array ( [autologin] => 1 [PHPSESSID] => b182ohml0eeg9t5rhmkcov9jq4 )

Men burde jeg ikke kunne skrive til cookien efter jeg har skabt den
med setcookie?

Gert Krabsen (18-05-2009)
Kommentar
Fra : Gert Krabsen


Dato : 18-05-09 16:16

Stig Sørensen skrev:
> On May 16, 7:40 pm, Dan Storm <shadyz_REMOVETH...@err0r.dk> wrote:
>
>> // tilfælig streng du fastsætter
>> $secret = "hdkwpwe739$$5..3";
>>
>> //md5 krypter brugerens oplysninger
>> $con = md5($secret.$brugernavn.$brugerid.$email);
>>
>> //smid det i en cookie sammen med et brugerid for at lette processen
>> setcookie("autologin", $value, (time()+(3600*24*7*31));
>> $_COOKIE["autologin"]["con"] = $con;
>> $_COOKIE["autologin"]["brugerid"] = $brugerid;
>
> Hej Dan.
>
> Jeg har følgende:
>
> $secret_password = "sJ2N8dHu03dJmc8sHDkjSh8Shkd28103jD";
> setcookie('autologin', 1, time()+(60*60*24*31));
> $_COOKIE['autologin']['user_id'] = $_SESSION['user_id'];
> $_COOKIE['autologin']['login'] = md5($secret_password . $_SESSION
> ['username'] . $_SESSION['email]);
>
> Mit problem er at cookien kun bliver skabt med setcookie, men de
> efterfølgende to linjer der tilføjer bruger id, samt det krypteret
> kodeord kommer ikke med.
> print_r($_COOKIE); får jeg blot:
>
> Array ( [autologin] => 1 [PHPSESSID] => b182ohml0eeg9t5rhmkcov9jq4 )
>
> Men burde jeg ikke kunne skrive til cookien efter jeg har skabt den
> med setcookie?

Man kan ikke 'skrive til en cookie', men kun sætte en ny, der så afløser
den tidligere.

N/A (18-05-2009)
Kommentar
Fra : N/A


Dato : 18-05-09 16:53



N/A (18-05-2009)
Kommentar
Fra : N/A


Dato : 18-05-09 16:16



Stig Sørensen (18-05-2009)
Kommentar
Fra : Stig Sørensen


Dato : 18-05-09 09:20

On May 18, 5:16 pm, Gert Krabsen <fjernkrab...@fjernkrabsenfjern.dk>
wrote:

> Man kan ikke 'skrive til en cookie', men kun sætte en ny, der så afløser
> den tidligere.

Tak skal du have. Så blev det løsningen med to setcookie - og det
virker.
Forstår bare ikke helt Dans eksempel så, men hovedsagen er at jeg fik
det til at virke

Mvh
Stig

Dan Storm (18-05-2009)
Kommentar
Fra : Dan Storm


Dato : 18-05-09 16:53

Stig Sørensen skrev:
> Forstår bare ikke helt Dans eksempel så, men hovedsagen er at jeg fik
> det til at virke

Det var bare mig der lavede en hjerneprut :) Så var det godt at Gert var
mere vågen end mig. ;)



--
Dan Storm - storm at err0r dot dk / http://err0r.dk

Tro ikke brugerne vil gøre noget for at undgå dit killfilter
- Så vigtig er du heller ikke!

N/A (23-05-2009)
Kommentar
Fra : N/A


Dato : 23-05-09 21:36



Stig Sørensen (18-05-2009)
Kommentar
Fra : Stig Sørensen


Dato : 18-05-09 11:08

On May 18, 5:52 pm, Dan Storm <shadyz_REMOVETH...@err0r.dk> wrote:

> Det var bare mig der lavede en hjerneprut :) Så var det godt at Gert var
> mere vågen end mig. ;)

Hehe, stadig mange tak. Det fungere glimrende

Mvh
Stig

Dude (23-05-2009)
Kommentar
Fra : Dude


Dato : 23-05-09 21:36

Stig Sørensen skrev:

> Mvh
> Stig

Hej Stig!

Jeg bemærker at du i en tidligere tråd nævner en OOP bog, som du tygger
dig igennem.

Hvad hedder bogen? - Jeg er selv på udkig efter noget i den retning.

Mvh
John

Søg
Reklame
Statistik
Spørgsmål : 177458
Tips : 31962
Nyheder : 719565
Indlæg : 6408169
Brugere : 218881

Månedens bedste
Årets bedste
Sidste års bedste