22. januar 2008 - 09:12Der er
11 kommentarer og 2 løsninger
Login samlignings problem
Ok jeg har et stort problem. Når jeg opretter en bruger på min hjemmeside og logger ind skal jeg huske upper and lower case. men jeg vil havde så man kan skrive både upper og lower case og logge ind. Kan nogle af jer hjælpe med det.
retake -> Du ville kun lave strtolower på brugernavnet ik ? Ellers bliver det et sikkerheds issue, da du så lige pludselig minimere antallet af mulige password.
retake: Som leif siger, og som jeg også har anbefalet.
Password: Ingen streng manipulering, md5 med et salt. Evt. sha-2 (sha-512) kryptering, da der findes rainbow tabeller ude på nettet at en rimelig anseelig størrelse. Rainbow tabeller er databaser over md5 strenge og deres oprindelige værdi. Og derfor anbefales det også at du bruge et tilfældigt salt.
Username: Syntes jeg heller ikke du skal gøre lowercase, du skal bare gøre strengene lowercase i sammenlignings øjeblikket. Mener ikke at MySQL er casesensitive når man sammenligner - hæng mig ikke op på det. Men du kan bruge LOWER(), for at være på den sikre side.
$result = mysql_query("SELECT * FROM users WHERE LOWER(username) = '" . strtolower($username) . "' LIMIT 1");
På den måde får du brugerens brugernavn på den måde som han oprindeligt skrev det, men sammenligner lowercase. Med f.eks. email-adresser ville jeg nok køre den igennem strtolower() inden jeg gemmer det i databasen, nu tænker jeg på hvis du bruger email adresse som login.
For at vende tilbage til salt; så kort fortalt genererer du en tilfældig værdi klistrer det ind i foran password og krypterer passwordet, med f.eks. md5 (husk hvad jeg sagde om SHA-2). Derefter gemmer du den krypterede streng (hash-værdien hedder det rigtigt) og saltet i databasen for den enkelt bruger.
Når du så skal sammenligne tager du og finder brugeren, den SQL ovenover. Tager salt fra dataset'et og klistrer det ind foran brugerens indtastede password fra login, kører MD5 på den streng og sammenligner med den hash der ligger gemt ved brugeren i databasen. Er de ens er passwordet korrekt.
$username = 'min@mail.dk'; $password = 'SuperHemmeligtPassword'; $salt = rand(100, 999); // $salt bliver bedre hvis det en funktion der // genererer tilfældige strenge, det må du selv finde
Så har du vist også fået rigeligt for det 15 points :)
Synes godt om
Ny brugerNybegynder
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.