Door
Mik PHP
op 09-10-2012 16:41
gewijzigd op 09-10-2012 16:47
5.604 views
Hey allemaal,
Ik zie echt gigantisch veel manieren voorbij komen om jou login zo veilig mogelijk te maken. Echter heeft elke manier wel een nadeel tot nu toe.
Aangezien het tegenwoordig niet te missen is dat gebruikers de website bezoeken via een mobieltje is het niet meer mogelijk om in combinatie met een ip een hash te maken. Er was een paar dagen terug een discussie gaanden over session hijacking waar eigenlijk veel verschillende oplossingen uit voortkwamen.
In hoeverre kan een sessie gekaapt worden?
Bijvoorbeeld. Je logt in. Er word een sessie aangemaakt met ID:1234567890. In deze sessie bevinden zich: userid = 1 en hash = jbhfgndjhsvghdnkf. Is het nu mogelijk om de complete sessie te kapen?
Cookies
En als je de hash nou opslaat in een cookie. Is het dan niet mogelijk deze ook te kapen?
Het kapen testen
En hoe kaap je een sessie? Als we dat allemaal zouden weten konden we testen of onze beveiliging goed genoeg is.
Ik zou toch graag nu samen met de kennis van iedereen die mee wilt denken komen tot een goede opzet van een beveiliging. Het hoeft niet perce in codes, maar kan ook in stappen: Wat sla je op, wat controleer je, hoe sla je het op, etc...
Hmm, oke... ik kan me niet herinneren dat ik ooit die session_cache_expire heb ingesteld (maar ik kan er naast zitten). Toch is het zo dat als ik ben ingelogd op een website en ik de browser sluit... en de browser weer open... dat ik dan niet ben ingelogd. Hoe kan dat dan?
Het heeft ook geen nut om de cache limit te activeren vanwege session_regenerate_id(TRUE); ... hij veranderd toch bij elke klik / $_POST of aanroepen van een PHP. Tevens verloopt de Session Cookie automatisch bij het beëindigen van de sessie zelf, vanwege Cookie lifetime = Session Lifetime
Bij veel sites is het omgekeerde het geval: als je per ongeluk een browservenster sluit of doorklikt naar een andere site maar binnen enkele minuten terugkeert, is je sessie niet reddeloos verloren. Op zich handig, want dan blijft de browserknop Back/Vorige bruikbaar en verlies je niet automatisch enkele minuten werk.
Je kunt eens kijken naar de HTTP-headers van die site. Maar uiteindelijk is de client de baas over de clientcache. Als een browser een streng beveiligingsbeleid heeft met een beslissingsregel zoals "wis alle cookies bij het sluiten van een venster", dan kan een server daaraan niets veranderen.
Bij veel sites is het omgekeerde het geval: als je per ongeluk een browservenster sluit of doorklikt naar een andere site maar binnen enkele minuten terugkeert, is je sessie niet reddeloos verloren. Op zich handig, want dan blijft de browserknop Back/Vorige bruikbaar en verlies je niet automatisch enkele minuten werk.
Ward, dit is logisch, want je hebt de browser niet afgesloten, dus kun je gewoon weer terug naar die site. Echter jij zei dat de sessie cookie actief blijft na het sluiten van de browser. Daar ging mijn vraag over.
Ozzie, dat is waar: moderne browsers hanteren inderdaad het beginsel dat het einde van een browsersessie meteen een einde maakt aan alle lopende sessies. Alleen, op wat de meeste clients doen bij de standaardinstellingen, kun je nooit vertrouwen.
Bij een corercte login maak je een session ID aan welke in de cookie en je DB komt. Maar je slaat ook direct gegevens van de gebruiker/pc op: Browser/OS etc. (fingerprint)
Weet hacker Bas K. nu mijn sessie/cookie na te bootsen, mag hij ook tot in detail OS/Browser etc nabootsen.
Succes Bas K!