rank in session: veilig?
Ik ben even een beetje aan t prutsen met een login systeempje, en druk doende een (waterdichte) beveiliging aan te brengen.
Ik gooi bijvoorbeeld een session_id en een user_id in een session, natuurlijk geen wachtwoorden of gebruikersnamen.
Nou vroeg ik mij af of het ook veilig genoeg is om een rank in sessie te zetten. Dus als de admin rank bv. 10 is, dat dat dan in sessie komt en moet kloppen met die andere sessies.
Je ziet het natuurlijk veel meer toegepast, maar ja, wil het toch even zeker weten. :D
p.s. als iemand nog leuke tips heeft over beveiliging: van harte welkom. Misschien ook wel eens leuk om een zeer uitgebreide tut daar van te maken, met echt alles er in :P
Er wordt een unieke sleutel opgeslagen in een cookie, met (doorgaans) de naam PHPSESSID. Als iemand deze sleutel weet te bemachtigen kan deze de cookie toevoegen aan zijn browser, en vervolgens de sessie van het slachtoffer 'overnemen'.
Om dit risico te beperken sla ik o.a. in de sessie op welk IP adres bij de sessie hoort, en welke USER AGENT.
Elke keer als de sessie wordt gestart worden deze waarden uit de sessie gematched met de actuele instellingen. Mochten deze ongelijk zijn wordt er een nieuwe (lege) session opgebouwd voor de bezoeker.
Nu creeer ik dus ook de sessie user_rank , en vergelijk ik die weer met elkaar. Zo iets had ik in gedachten. Dan blijf je wel aan het vergelijken, en mijn theorie zegt dan dat het niet meer mogelijk is om 1 van deze sessies over te nemen zeg maar.
Maar daarom kom ik hier weer, ik kan het mis hebben natuurlijk... :D
Ik weet niet precies hoe jij de rang vordering op slaat maar volgens mij kun je beter zeg maar gewoon ALLES bij elkaar op tellen en dan delen door zo veel per rang ga je telkens delen door zo veel.. bijvoorbeeld
rang 1 is gewoon delen door 1
rang 2 is delen door 1,25 ofzo
rang 3 is delen door 1,50..
ongeveer maar dan sla je gewoon alles op in je database..
Ik kan het ook dingen over het hoofd zien, maar zo zou ik het eerder doen..
en waarom een user_id en seesion_id dat is toch het zelfde getal?? of zie ik het verkeert? Maarja nooit zo'n spel gemaakt :P maar wel gespeelt
Gewijzigd op 01/01/1970 01:00:00 door Yoram
Je ziet het verkeerd, het gaat hier niet om een spel, maar om een inlog systeem. Met de rank bedoel ik of iemand admin is, of moderator, of iets dergelijks. Dit is ook niet een sessie die veel wijzigd, tenzij de admin dat toepast natuurlijk. Maar dan wordt het gewijzigd in de database.
De user_id en session_id zijn niet het zelfde. De ene is de id die bij die user past, en in de database staat en de session_id is de id die voor die sessie is aangemaakt, om de beveiliging wat strakker te maken... :D
A.d.h.v. de user id en hash controleer ik of de gebruiker bestaat. En zo kan ik ook makkelijk de rang ophalen.
Ik heb dit met een classe gedaan. Zodat ik als ik op een pagina 5 controles heb, of iemand is ingelogd, niet 5 keer een query wordt uitgevoerd.
Ik zet de waarde in een variable in de classe. En deze wordt gecontroleerd of die gezet is.
persoonlijk denk ik dat het ook makkelijk is als je een functie maakt die controlleerd zeg maar je rang id en als je die niet hebt bv dat je er uit geknikkerd word (uit de pagina waar je bv rang id 99 moet hebben)
Als je de rechten verdeeld gebruik dan niet de namen .. doe dat met die functie..
Gewijzigd op 01/01/1970 01:00:00 door Yoram
aha ja dat kan ook. eigenlijk komt dat op het zelfde neer, zeg maar, alleen gooi je t niet in een sessie, en dus niet naar buiten. en als je die var in je class protected maakt, dan mag die alleen binnen je class worden aangeroepen toch? Ff nazoeken.. :P
@Yoram,
anders was ik hier niet mee bezig he... Dat ik die rank van mij in een sessie wil zetten is natuurlijk niet om dat te registreren ofzo...
Verder nog op of aanmerkingen (tips)? Mijn script komt aardig in de buurt van die van dennis, (alleen dan met sessies) dus dat houd in dat dat goed is? Of is het niet veilig genoeg?