Sessions of cookies
Met andere woorden, telkens als je voor een gebruiker een sessie aanmaakt wordt er een nieuwe sessie id gegenereerd. Tevens kunnen 'hackers' weinig met een gebruikersnaam lijkt me.
een andere oplossing kan zijn dat je elke gebruiker een 'screen name' geeft. Met andere woorden dit kan compleet afwijken van je gebruikersnaam. Hier is je gebruikernaam je email adres, echter is mijn 'screen name' Chris NVT :D.
Dit kan ik even niet volgen. Daar hoef je de regenerate functie toch niet voor te gebruiken? Dat gaat toch automatisch als er een nieuwe sessie wordt aangemaakt?
Ozzie PHP op 02/05/2012 10:16:09:
"Je kunt toch een session_regenerate_id gebruiken om de kans op session hacken te verkleinen. En dan maakt het niet uit of nu gebruiker pietje het id 2130978219837 heeft, de volgende keer dat hij weer inlogt heeft pietje 958763236987234."
Dit kan ik even niet volgen. Daar hoef je de regenerate functie toch niet voor te gebruiken? Dat gaat toch automatisch als er een nieuwe sessie wordt aangemaakt?
Dit kan ik even niet volgen. Daar hoef je de regenerate functie toch niet voor te gebruiken? Dat gaat toch automatisch als er een nieuwe sessie wordt aangemaakt?
Ja de sessie vervalt, en je maakt een 'nieuwe' sessie aan. Echter kan de sessie ID lang hetzelfde blijven. Dus kan een hacker meeliften op dat id.
Wat is dan de oplossing? Bij iedere pagina-aanroep de sessie id wijzigen? Dat lijkt me vanuit performance oogpunt niet echt heel slim...
Ozzie PHP op 02/05/2012 11:01:51:
Wat is dan de oplossing? Bij iedere pagina-aanroep de sessie id wijzigen? Dat lijkt me vanuit performance oogpunt niet echt heel slim...
huh? bij iedere pagina aanroep? Je maakt hopelijk toch niet op elke pagina een nieuwe sessie wel?
Bij login neem ik aan dat je een sessie aanmaakt correct? Dus daar generate je een nieuwe id, zodat hij bij het aanmaken van de sessie een nieuwe id krijgt.
Bij uitloggen of sluiten van de browser wordt de sessie beeindigd, dus wordt er bij login weer een nieuwe aangemaakt met een nieuw id.
Ja, maar jij gebruikt hier toch niet de session_regenerate_id functie mag ik hopen?
Ozzie PHP op 02/05/2012 12:13:05:
session-regenerate-id Lees dit even door, dan begrijp je wel wat ik bedoel ;)"Bij login neem ik aan dat je een sessie aanmaakt correct? Dus daar generate je een nieuwe id, zodat hij bij het aanmaken van de sessie een nieuwe id krijgt."
Ja, maar jij gebruikt hier toch niet de session_regenerate_id functie mag ik hopen?
Ja, maar jij gebruikt hier toch niet de session_regenerate_id functie mag ik hopen?
Je beantwoordt mijn vraag niet ;)
Ozzie PHP op 02/05/2012 12:29:01:
Je beantwoordt mijn vraag niet ;)
LOL, bij het login script genereer ik een nieuwe sessie id, dus
session_start();
session_generate_id();
blablabla de rest van het script.
Ja, maar dit betekent dus dat jij bij IEDERE pagina-aanroep een nieuwe ID genereert!
Ozzie PHP op 02/05/2012 12:40:04:
Ja, maar dit betekent dus dat jij bij IEDERE pagina-aanroep een nieuwe ID genereert!
Hoe kom je daar toch bij? Dit wordt alleen bij het login script gebruikt!
Dus niet op elke pagina waar session_start(); staat, maar waar de sessie aangemaakt wordt.
Iedere sessie krijgt z'n eigen id. Jij start nu een sessie en vervolgens ga je de id van die sessie veranderen :)
Ozzie PHP op 02/05/2012 12:45:40:
ja, maar het heeft geen zin :)
Iedere sessie krijgt z'n eigen id. Jij start nu een sessie en vervolgens ga je de id van die sessie veranderen :)
Iedere sessie krijgt z'n eigen id. Jij start nu een sessie en vervolgens ga je de id van die sessie veranderen :)
Een sessie id wijzigd niet als je gewoon weer een nieuwe sessie aanmaakt.
test het is en maak is een sessie aan, dan echo session_id();
dan browser compleet sluiten en herhaal.
Dat is wat ik bedoel...
Tenzij er dus een bestaande sessie is die jij verandert als men inlogt. Is dat wat je bedoelt?
Ozzie PHP op 02/05/2012 13:01:45:
maar wel als je die regenerate functie gebruikt. Die gebruik jij nu voor niks.
Dat is wat ik bedoel...
Tenzij er dus een bestaande sessie is die jij verandert als men inlogt. Is dat wat je bedoelt?
Dat is wat ik bedoel...
Tenzij er dus een bestaande sessie is die jij verandert als men inlogt. Is dat wat je bedoelt?
Nogmaals heeeeeeel uitgebreid :D
Als iemand inlogd, maak ik een sessie aan en sla daar wat stats in op.
vervolgens huppelt die over de site en na een uur verlaat hij de site (einde sessie!). Of het nu via een logout (session_destroy();) of sluiten van de browser is, de sessie is beeindigd.
Logt ie opnieuw in ZONDER zijn cache/cookies etc te clearen krijgt hij de zelfde sessie ID als voorheen terug!, dit verkom je dus om bij een nieuwe login de session_generate_id te gebruiken. Hier krijgt hij dus een nieuwe.
P.S. de Wiki link over sessie id.
Gewijzigd op 02/05/2012 13:09:46 door Chris PHP
Zelfde geldt voor time-out. Sessie is verlopen dus er wordt een nieuwe sessie gegenereerd, dus ook nieuwe sessie id.
Ozzie PHP op 02/05/2012 13:14:41:
Hmmm... oké. Maar als iemand handmatig uitlogt, dan destroy je de sessie + reset je de cookie. Dan is volgens mij de sessie_id ook gewist en krijg je bij opnieuw inloggen dus automatisch een nieuwe sessie id.
Zelfde geldt voor time-out. Sessie is verlopen dus er wordt een nieuwe sessie gegenereerd, dus ook nieuwe sessie id.
Zelfde geldt voor time-out. Sessie is verlopen dus er wordt een nieuwe sessie gegenereerd, dus ook nieuwe sessie id.
Cookies worden niet verwijderd bij een session_destroy(); dus de session_id blijst daarin staan, de eerst volgende keer dat je inlogt ziet hij die cookie en dat id wat dus hergebruikt wordt.
Sessies worden op de server opgeslagen, niet lokaal alleen een cookie met het ID erin staat lokaal. session_destroy(); zal dan ook alleen de sessie op de server vernietigen.
Vandaar het advies gebruik session_generate_id(); bij het inlog script
Wat ik alleen niet begrijp is hetvolgende. Als de sessie expiredt dan is de sessie (het bestand) niet meer geldig en wordt er een nieuws sessiebestand gemaakt. De naam van dat bestand correspondeert met het sessie-id... wat dus verandert.
Daarnaast... als ik een actieve sessie heb en ik sluit de browser af en ik start een nieuwe browser, dan krijg ik toch ook een nieuwe id?
Anyhow, ik zal me er nog eens een keer in verdiepen als ik meer tijd heb ;-)
Gewijzigd op 02/05/2012 13:33:45 door Ozzie PHP