rank in session: veilig?

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Mark moes

mark moes

31/03/2009 10:15:00
Quote Anchor link
Hoi.
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
 
PHP hulp

PHP hulp

24/11/2024 03:01:05
 
Martijn Wieringa

Martijn Wieringa

31/03/2009 10:22:00
Quote Anchor link
Het 'gevaar' in sessies zit 'em in de COOKIE.

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.
 
Mark moes

mark moes

31/03/2009 10:36:00
Quote Anchor link
Ik sla het ip adres ook op in een sessie inderdaad. Ik heb dan dus normaal 3 sessies gecreeerd, de user_id, session_id en de user_ip.
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
 
Yoram

Yoram

31/03/2009 10:45:00
Quote Anchor link
Ik denk dat het niet slim is om in een sessie je rank vordering te doen.. maar via je database.. want als je alles in een sessie stopt word het na 50 spelers of meer denk ik erg langzaam omdat ALLES in de sessie word op geslagen..

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
 
Mark moes

mark moes

31/03/2009 10:52:00
Quote Anchor link
@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
 
Dennis Mertens

Dennis Mertens

31/03/2009 10:58:00
Quote Anchor link
Ik maak altijd 2 sessions aan. User id en een hash.

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.
 
Yoram

Yoram

31/03/2009 11:00:00
Quote Anchor link
aah okee, ik dacht dat je het bedoelde met ranke in het spel, maar dan kun je dat wel doen om zeg maar de rang id in een sessie te zetten.. (ik vind het wel handig doe het zelf ook, anders moet je telkens uit het database laten lezen)

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
 
Mark moes

mark moes

31/03/2009 11:16:00
Quote Anchor link
@dennis
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...
 
Mark moes

mark moes

01/04/2009 09:59:00
Quote Anchor link
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?
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.