Veiligheid login
Wat plaats jij in je sessie/koekje om zeker te weten dat de juiste gebruiker op jou beveiligde pagina's zit en niet iemand die een sessie/cookie heeft gekaapt?
IP Adres kan, maar sommige providers wisselen van IP dus dan zou de bezoeker ineens kunnen zijn uitgelogd.
HTTP_USER_AGENT is waarschijnlijk wel na te maken/te veranderen? En als je deze nou als hash met sha1 opslaat?
Code (php)
Zou dit veilig zijn?
Jullie nog veilige(re) ideeen?
Als dat niet het geval ik unset(); ik alle sessies en exit(); de pagina.
Nooit een wachtwoord in een sessie!!
@Turmin: tja, dit is de bekende afweging tussen veiligheid en gebruiksvriendelijkeheid. Wil je het extreem veilig dan laat je de gebruiker bij elke handeling zijn wachtwoord invoeren. Wil je het gebruiksvriendelijk, dan heb je helemaal geen wachtwoord nodig. Dit zijn natuurlijk uitersten die beide niet gewenst zijn, maar het geeft wel de afweging weer die je moet maken.
De HTTP_USER_AGENT is zeker te wijzigen, maar ik denk dat je een goede weg inslaat door de hash ervan te gebruiken. Mocht iemand dan de informatie in handen krijgen, weten ze nog niet welke user agent gebruikt werd. Of je het ip-adres wel of niet gebruikt hangt er maar net vanaf hoe veilig je de applicatie wilt maken (de afweging waar ik het over had). Vind je veiligheid belangrijk, dan zou je bijvoorbeeld ook nog naar de HTTP_REFERER kunnen kijken en een gebruiker opnieuw laten inloggen als hij niet van een van de beveiligde pagina's komt.
Kortom, heel veel mogelijke combinaties om de data te beveiligen/verifieren. De keuze is aan jou ;-)
Sla je naam en wachtwoord nooit op in een sessie op cookie.
@Blanche; Bedankt voor je reactie. Ik snap dat 't inderdaad een afweging is, maar daarom ben ik juist benieuwd of iemand een idee heeft die naar mijn idee echt goed is. Ik weet niet precies op welke manier of om de hoeveel tijd een IP adres wordt vernieuwd (voor de gene die zo'n provider hebben), maar het lijkt me toch erg irritant als dit gebeurt terwijl je gewoon actief aan 't surfen bent en ineens wordt uitgelogd omdat, zonder dat je 't zelf merkt, je IP ineens is verandert.
Op dit moment maak ik 2 sessies als je inlogt. $_SESSION['ingelogd']['id'] met het ID van de gebruiker, zodat ik ook makkelijk de rest van zijn gegevens erbij kan halen. En een $_SESSION['ingelogd']['ip'] met de $_SERVER['REMOTE_ADDR'] erin. Misschien dat ik 't IP inderdaad verander naar sha1($_SERVER['HTTP_USER_AGENT']). HTTP_REFERER lijkt me erg (oms)lastig want niet al mijn pagina's zijn alleen voor ingelogde gebruikers. Dus volgens jou zou de bezoeker dan uitgelogd worden als deze de index of sitemap of voorwaarden of privacy of contact,etc pagina bezoekt omdat deze niet zijn beveiligd.
Wat is er mis met exit(), mits goed gebruikt?
En wanneer gebruik je 't goed? Je stopt ineens alles dus ook het laden van je layout e.d. waardoor deze niet volledig wordt geladen. Geef gewoon een mooie foutmelding of zo.
Soms is exit handig (direct stoppen bij een fout), maar alleen als dat de intentie is.
Maar ja, wachtwoorden in een sessie stoppen is ook niet slim.
Zeker op shared servers...
Al heeft PHP een basedir restriction, je kunt via andere methoden nog altijd nog elke map bekijken die je wilt (mits juiste rechten)
En als sessie's gewoon in /tmp staan (komt meestal voor), dan is het helemaal makkelijk...
Maak een sessie aan in /tmp met rechten 666, en geef bij een andere site op dezelfde server deze SID op.
Tada, sessiegegevens gejat.
Wel moet een gebruiker zijn wachtwoord invullen bij bij gegevens wijzigen en dergelijke zaken.
Voor cookies sla ik gebruikersnaam en een random gegeneerde code op die als tijdelijk wachtwoord functioneert. Dit omdat het nooit verstandig is het echte wachtwoord op te slaan bij een gebruiker. Deze code word elke keer vernieuwd als je inlogged. Hierbij controleer ik wel op IP.
Ik heb gehoord dat mensen ipv user-agent controles doen aan content-sniffing om te controleren of de user-agent wel klopt.