Avatar billede moddi100 Seniormester
02. november 2011 - 21:33 Der er 15 kommentarer og
1 løsning

Opbevaring af passwords under session

Hej,

Kom til at fundere over den sikreste måde at opbevare passwords sålænge en bruger er aktiv.

For at komme med et eksempel kan vi sige at jeg ønsker at lave et online ftp-program. Brugeren logger så ind med brugernavn/password. Dernæst har han mulighed for at indtaste oplysninger om en fjern ftp-server og så ellers bruge hjemmesiden som en ftp-client.

Her vil jeg så høre hvordan jeg bedst opbevarer hans brugernavn og password til fjernserver? Det skal være en måde hvorpå det ikke tager 100 år at dekryptere data'en men samtidig også er sikkert?

Tænkte på om man skulle gemme det i en session med lettere kryptering, men den slettes jo så bare ikke med sikkerhed efter endt besøg. Er database eller en separat fil pr bruger en bedre ide?

Med venlig hilsen
Morten
Avatar billede nizo Nybegynder
03. november 2011 - 00:54 #1
Er passwords ikke allerede gemt som hash (evt. salted) strenge i databasen? I så fald, er det intet problem at gemme dem i din session. Ellers se evt. http://stackoverflow.com/questions/401656/secure-hash-and-salt-for-php-passwords
Avatar billede arne_v Ekspert
03. november 2011 - 00:55 #2
Faktisk et interessant problem.

Lidt blandede ideer:
A) login ind paa FTP server naar bruger gaar paa siden, holds connection til FTP server aaben og gem ikke password
B) brug session uden kryptering udfra en betragtning om at session storage vel er lige saa sikker som PHP siden (hvis nogen har adgang til session storage har de sikkert ogsaa adgang til at rette PHP koden til at gemme en kopi af password)
C) gem oplysningen i en client side session cookie
D) gem i session og brug staerk kryptering - det koster ikke noget at AES kryptere & dekryptere - problemet er her hvor skal key gemmes:
D1) hardcoded i PHP
D2) i client side session cookie
D3) permanent kendt info som f.eks. brugernavn
D4) midlertidigt kendt info som f.eks. client IP adresse

Jeg kan ikke entydigt sig hvad der er bedst for dig.
Avatar billede arne_v Ekspert
03. november 2011 - 00:56 #3
re #1)

Man kan ikke bruge et hashet password til en remote FTP server.
Avatar billede nizo Nybegynder
03. november 2011 - 01:17 #4
Ja, det overså jeg godt nok. Men uanset om passwordet er krypteret eller ej, bør du have SSL forbindelse, for at gemme i session. Den dertil mere sikre side må være at gemme som cookie, så er det kun lokale sikkerhedshuller der kan være en evt. risiko.
Avatar billede moddi100 Seniormester
03. november 2011 - 01:22 #5
Vil tillade mig at udelukke A), da det gerne må være generelt - Hvad nu hvis vi også vil tilføje mail til servicen som en slags online skrivebord?

C) Ville måske ikke være det smarteste hvis vi tilgik systemet fra en offentlig computer og folk ikke loggede af - Men eftersom dette mere er et tankeeksperiment, kunne det jo sagtens være en løsning alligevel.

I forhold til D), hvor store data-mængder snakker vi om skal til før det øger ventetiden? og mon ikke man kunne lave key som en kombination af dine Dx) varianter?
Avatar billede moddi100 Seniormester
03. november 2011 - 01:24 #6
Bryder mig nu heller ikke så meget for ideen med at gemme passwords i cookies - så skal de jo netop vandre frem og tilbage mellem client og server for hver eneste indlæsning.
Avatar billede arne_v Ekspert
03. november 2011 - 02:29 #7
For en session cookie er det nok at lukke browseren ned.

Du skal op i megabytes foerend kryptering virkeligt vil kunne maerkes.

At sende en cookie med et enklt ord med hver request vil naeppe kunne maerkes paa performance.
Avatar billede arne_v Ekspert
03. november 2011 - 02:30 #8
re #4)

Ja - SSL er noedvendigt uanset hvad.
Avatar billede moddi100 Seniormester
07. november 2011 - 23:02 #9
Er kommet frem til at krypterede cookies vel egentlig er det mest sikre, da der så ikke ligger passwords på serveren. Ved brug af sessions gemmes de jo i en fil og det samme hvis man gemmer dem i databasen.

Så langt så godt. En bruger vil indtaste oplysningerne til den ønskede fjernserver og disse vil blive gemt i en cookie. Men hvad så hvis jeg ønsker at gemme det til næste gang? Så er det bedste vel egentlig at gemme krypteret i databasen?
Avatar billede arne_v Ekspert
07. november 2011 - 23:17 #10
Jo.

Men hvad vil du bruge som key?
Avatar billede moddi100 Seniormester
07. november 2011 - 23:32 #11
Tænker at man kunne lave det sådan at der genereres en unik nøgle pr bruger, men ved dog ikke om det er godt nok?
Avatar billede arne_v Ekspert
07. november 2011 - 23:45 #12
Det kan du sagtens.

Men er det mere sikkert at have en tabel med:
* krypteret password
* key til kryptering
end en tabel med:
* ikke krypteret password
?

Svar: lidt mere sikkert, men ikke meget mere sikkert !
Avatar billede moddi100 Seniormester
08. november 2011 - 07:48 #13
Du har en pointe, men hvis man kombinerer det med en hardcoded key i selve filen, er det vel bedre?
Avatar billede arne_v Ekspert
08. november 2011 - 14:48 #14
Hvis man mener at det er vigtigt at beskytte sig mod situationen hvor the bad guys har adgang til databasen men ikke til applikationen: ja.
Avatar billede moddi100 Seniormester
08. november 2011 - 20:06 #15
Takker mange gange for dine synspunkter arne_v. Det er altid rart at blive klogere ;)

Smid et svar hvis du ønsker point
Avatar billede arne_v Ekspert
08. november 2011 - 21:29 #16
svar
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