Avatar billede jensgram Nybegynder
07. april 2003 - 19:11 Der er 15 kommentarer og
3 løsninger

Sessions, cookies, login og sikkerhed

Hej Eksperter

Jeg søger lidt råd vedrørende et login-system:

Min nuværende brugerdatabase indeholder tre kolonner: id, brugernavn, password, hvor passwordet er md5-"krypteret".
Førhen har jeg gemt brugernavnet i en cookie, og så tjekket det mod databasen, men det er jo ikke særligt sikkert. Derfor vil jeg benytte sessions, men jeg er ikke så rutineret i brugen deraf.

1) Jeg ønsker kort sagt, at en session skal indeholde relevante data, men hvad er det? Id? Brugernavn? Password? Kombinationer deraf?

2) Desuden skal der være en "husk mig"-funktion, der gemmer oplysninger i en cookie, men igen; hvilke oplysninger bør jeg gemme?

Umiddelbart vil jeg mene, at brugernavn og password må være løsningen i begge tilfælde, men hvad mener I?

Jeg vil gerne have konkrete bud med god argumentation, så mit system bliver så SIKKERT som muligt.
Håber I kan hjælpe.

- Jens Gram


PS: Jeg kigger nok først tilbage i morgen, men alle der kommer med "guldkorn" vil få points...
PPS: Jeg ved ikke lige, om dette er den rigtige kategori, men jeg ved, at mange har lavet et sådant system i PHP, og at der er mange kloge folk herinde.
PPPS: Jeg er IKKE ude efter færdige løsninger, da jeg selv vil lave det - jeg vil udelukkende have en SIKKERHEDSVURDERING!
Avatar billede thomast Nybegynder
07. april 2003 - 19:15 #1
Jeg har hørt md5 skulle være det mest sikre. Jeg bruger det også selv på min hjemmeisde!
Avatar billede bacce.dk Nybegynder
07. april 2003 - 19:35 #2
hmm under login kan du egentlig nøjes med at registrere sessions på brugernavnet og droppe session på passwordet. på den måde kan du hele tiden hive hans navn frem og bruge det på siden.
Jeg selv bruger dog altid brugernavn samt brugerens id ad det så er ud fra id jeg bruger hver gang en bruger gøår et eller andet der skal registreres.
det er altid mere sikkert at din database kan finde det rigtige via et nummer (id) i stedet for brugernavn hvor der kan være foreskelde på store og små bogstaver..
til det med "remember me" funktionen, så ja der smidder du både brugernavn og password i en cookie. og i valuen på dine tekst felter skriver du så disse cookies names...
Avatar billede melange Nybegynder
07. april 2003 - 19:39 #3
Nu benytter jeg personligt aldrig  Sessions i mine løsninger, og ved heller ikke så meget om dem, men så vidt jeg ved er de ikke mere sikkre end cookies, da en session bare er en cookie som bliver slettet igen.

Anyway, den optimale løsning er vel bare, som du selv siger, at gemme brugernavn/ip (bare så du kan indentificere brugeren) og det krypterede password i en cookie (eller session for den sags skyld).

Nej, sikerhedsproblemmerne plejer ikke at ligge direkte i loginscriptet, for det gør folk "oversikkre", der hvor du skal passe på er helt normale, og tilsyneladende ufarlige, ting som:

include($_GET['page']);

hvis du her glemmer at validere $_GET['page'] vil brugeren kunne definere det som 'http://server.com/evil_script.txt', hvor evil_script.txt indeholder en række php-koder. Disse PHP-koder vil din server, tro det eller ej, køre igennem, og så er det ikke svært at skaffe sig ubegrænset adgang til serveren.

Du kan evt lære mere om de normale sikkerhedsfejl her:
http://www.developer.com/lang/article.php/918141
Avatar billede bacce.dk Nybegynder
07. april 2003 - 19:43 #4
melange>> en session er ikke blot en cookie der bliver slettet igen.
En session har den fordel at den bliver gæmt på serveren frem for hos klienten.
dette er en meget stor fordel efter IE6.0 kom på gaden...
IE6.0 har nemlig den brist at den som standart IKKE accepterer cookies og da største delen af DK's befolkning ikke ved hvordan man får IE6.0 til at acceptere cookies er dette en meget uholdbar løsning i dag hvis man vil lave et site alle skulle have mulighed for at benytte.
Avatar billede melange Nybegynder
07. april 2003 - 19:55 #5
bacce.dk << nu har jeg hverken gang i nogle større (php-)projekter i øjeblikket, eller lyst til at begynde at ødelægge en anden spørgsmål med egne spørgsmål.
Men jeg vil da læse lidt mere om sessions, og overveje at bruge dem næste gang jeg skal lave noget "husk-oplysninger"-halløj
Avatar billede bacce.dk Nybegynder
07. april 2003 - 20:08 #6
melange>> ville dog også bare lige oplyse det, da det jo vidst var en misforståelse, og denne ville vores ven der stillede spørgsmålet jo så også rende rundt med ;-)
Avatar billede jensgram Nybegynder
07. april 2003 - 20:17 #7
bacce.dk > Tak for tanken (20:08:03). Jeg vidste dog godt, at det var en fejl, men fremtidige læsere af dette spørgsmål kunne jo falde i ;)

Indtil videre holder jeg mig til at gemme brugernavn og id i en session og så brugernavn og password i en cookie ved "husk mig"...

I må endelig indvende, hvis I eller andre har noget...
Avatar billede bacce.dk Nybegynder
07. april 2003 - 20:21 #8
hehe selv tak du.. og ja andre kunne måske også falde i den :-)
men ja jeg syntes du valgte en finno løsning.. nemlig min *GGGGG*
ej spøg til side.
Jeg syntes selv det er en god løsning og på det grundlag at den altid har kunne bruges lige meget hvilken form for side jeg har bygget.
så det gør også at man kan copy koden til nye sites når først det spiller. så sparer man tid på netop login området ;-)
Avatar billede bacce.dk Nybegynder
07. april 2003 - 23:03 #9
hm skulle vi ikke lukke spm ??
Avatar billede andy Nybegynder
08. april 2003 - 08:49 #10
bacce.dk > Jeg er ikke helt sikker på at du har ret i at IE6.0 som default blocker alle cookies. Så vidt jeg ved er det kun 3rd party cookie der blockes.
Avatar billede taager-kongen Nybegynder
08. april 2003 - 10:01 #11
lytter
Avatar billede jensgram Nybegynder
08. april 2003 - 10:51 #12
bacce.dk "  hm skulle vi ikke lukke spm ?? " > Nej, jeg kunne da godt tænke mig lidt andre vurderinger. Håber stadig, at der er nogle andre, der vil kigge forbi.
Avatar billede bacce.dk Nybegynder
08. april 2003 - 12:05 #13
ohh okey fair nok så
Avatar billede babz Nybegynder
08. april 2003 - 12:24 #14
Tja....

Du kan med session_start();
oprette en session......
Denne session får et autogenereret navn fra serverens (et PHPSESSID), som lagres i klienten.
Dette session-id gemmes tilsvarende på serveren. Du kan i dit session array på serveren gemme adskillige andre variabler, med tilhørende værdier med session_register('varnavn')...

Herefter kunne du sætte session-variablen med $_SESSION['varnavn']=etellerandet;.

Så har du en variabel med tilhørende værdi på serveren.

Hvis vedkommende logger ud, eller lukker sin browser dør den session, og brugeren oprettes på ny ved en ny login.

Finten ved at bruge disse sessions er at du i og for sig kan oprette en session uden at brugeren behøver at acceptere en cookie...
Groft sagt behøver du ikke den cookie...
Hvilket ville medføre at du blev nødt til at registrere om vedkommendes login er OK, og om der er en session med vedkommende kørende, og om det svarer til den session du har gemt.

Men med en cookie får du muligheden for at checke session_id automatisk fra den cookie som er sendt....Hvis man husker at skrive session_start();
på hver side der skal bruge denne session.
Hvis man glemmer det, vil session_id forsvinde og verificering kan ikke finde sted gennem det session_id der ligger i cookien.

session_start(); skal være det første der sker i scriptet, fordi kommunikationen sendes via http-protokollens header-info og session_snask kan ikke foregå andre steder....Det er også der man kan hente brugerens cookie fra, php gemmer det bare i sit $_cookie[].


konklusion.....

Jeg synes generelt cookies er noget snavs.......fordi de bliver brugt og kan misbruges.....Men med sessions er der mulighed for at lave noget meningsfyldt....

(Min mening om det.)

Men brugernavn og pass gemmer man (jeg) ikke i en cookie.
Jeg bruger sessions til det. Også ud fra den betragtning, at brugerens klient ikke skal oversås med mere eller mindre brugbare cookie-informationer, som vedkommende måske får brug for igen en dag.

Sessions er også dejligt skjulte (relativt sikre) da de køres af/på serveren.

Råd:
GO GO brug de sessions.


babz.
Avatar billede jensgram Nybegynder
08. april 2003 - 15:14 #15
babz > Ok, tak for inputtet, men det ser ikke ud til, at du har læst spørgsmålet ;)

Men bare rolig - du skal også nok få points for din udredning af hvordan sessions behandles.

"Men brugernavn og pass gemmer man (jeg) ikke i en cookie" - så er det jo lidt svært at lave "husk mig"...
Avatar billede babz Nybegynder
08. april 2003 - 17:02 #16
"Men brugernavn og pass gemmer man (jeg) ikke i en cookie" - så er det jo lidt svært at lave "husk mig"...

Joda.

Hvis det var mig....men det er det jo ikke, havde jeg valgt et lille dbms drevet script til at validere brugere med. I den database vil det være muligt at gemme de samme ting som du vil gemme i en cookie, hvis der er noget der er så vigtigt at det skal huskes til næste login.

babz
Avatar billede babz Nybegynder
08. april 2003 - 17:10 #17
Jeg har iøvrigt læst dit spørgsmål....

Jeg mener bare ikke at cookies er nogen god løsning.

Du skriver til sidst at det skal være så sikkert som muligt.....og det kan den slags næsten ikke rigtigt blive hvis du bruger en cookie til at gemme følsomme oplysninger i.

Derfor ville jeg som allerede nævnt vælge at lave en validering af brugeren i en database, hvori der er en "preferencer"-relation med tilhørende variabler eller noget....

EVT. bare en 4. kolonne med de oplysninger du vil gemme for en bruger.

Men alt det her afhænger jo også af hvilken dbms du har valgt. Om vi snakker en ganske gemen relationel database eller om vi snakker objekt-relationel eller objekt-orienteret db.

Eksempel:
Postgresql (personel favorite ;-)).
Er  en objektrelationel database hvor vi kunne lade den 4. kolonne indeholde et array hvori du kunne gemme detaljer om hver enkelt bruger. Således bliver et bruger-tuple en record med (id,brugernavn,password,preferences[]).

Babz.
Avatar billede jensgram Nybegynder
08. april 2003 - 18:21 #18
babz > Ok, på dén måde... Så må du undskylde ;)

Jeg tror dog bare jeg holder mig til sessions med id / brugernavn og cookies* med brugernavn / md5(password)!

*)
Jeg mener, at det er ok med cookies, når folk selv kan vælge det fra. De skal jo selv afkrydes "husk mig".


Mange tak for hjælpen. Håber at alle er tilfredse.

- Jens Gram
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester