Johnny schreef op 10 april 2004 @ 12:00:
sessions zijn echt geweldig, als je het eenmaal snapt.
Trouwens, alleen een user_id in de cookie steken is niet zo veilig, want dan kan iedere nerd een ander nummertje in zijn cookie zetten om als iemand anders in te loggen.
Wat ik het handigst vind is om een hashcode achter je user_id te zetten, die hash maak je dan met md5() uit het password/username/user_id of een combinatie daarvan.
Als je een cookie uitleest splits je de userid en hashcode op, haal je de juiste record uit de database, maakt daarmee een hash en vergelijkt ze met elkaar.
Ik heb dit nooit zo begrepen. Waarom zou je moeilijk doen door een hash te maken van user_id, password, etcetera. Het boeit uiteindelijk helemaal niets. De kans dat iemand een hash raadt wordt er gewoonlijks alleen maar hoger van. Ik reken het even voor:
16
32 = het aantal mogelijke md5 strings, een hexadecimale digit, en dat dus 32 keer. Wil je dit met een gewone string een evengroot bereik hebben, dan moet die string 16 tekens lang zijn, want 16
32 = 256
16. Kortom, het is meestal beter om gewoon het wachtwoord te gaan raden, en niet de md5 string, want we mogen denk ik aannemen dat de gemiddelde lengte van wachtwoorden op niet meer dan 10 tekens ligt. En zelfs dan, niet alle 256 karakters uit de beschikbare reeks zullen even frequent worden gebruikt.
Wat ik wil duidelijk maken, is dat het helemaal niets mag uitmaken wat er precies ge-md5't is, als het maar een zo willekeurig mogelijke hash oplevert. De hash gaan proberen te raden loont veel minder dan gewoon het wachtwoord proberen te raden. Pas bij een string die gemiddeld meer dan 128 bits gebruikt is het raden van de md5 verstandiger.
Ik gebruik dus gewoon een willekeurige md5 hash als session id, en wat dat verder is, dat boeit eigenlijk niets. Ik zet overigens ook het user_id in het cookie, en vergelijk dat met het user_id uit de sessie.
Eigenlijk ook een beetje onzinnig omdat de kans dat iemand een sessie kan stelen al zo klein is, maar goed, die maken we dus nogeens een stuk kleiner, gelijk aan een factor die gelijk is aan het aantal personen dat in kan loggen. Zo kun je nog wel verder gaan, maar ik vind een kans van 1:2
128 wel genoeg. Het is een bizar groot getal. En het raden van een wachtwoord is veel eenvoudiger.