Veiligheid login
Hey phphulpers,
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?
Zou dit veilig zijn?
Jullie nog veilige(re) ideeen?
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?
Gesponsorde koppelingen:
ik zet altijd de naam en het wachtwoord in een sessie, en controleer op elke pagina dmv bijv. Check.php includen of er een rij is in mijn database met die naam en dat password.
Als dat niet het geval ik unset(); ik alle sessies en exit(); de pagina.
Als dat niet het geval ik unset(); ik alle sessies en exit(); de pagina.
Nooit een wachtwoord in een sessie!!
Het wachtwoord sla je sowieso NOOIT op in een sessie of cookie. Dat is ten eerste nergens voor nodig en daarnaast brengt het een groot risico met zich mee.
@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 ;-)
@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 ;-)
@Roboroads; Jou manier is zeker weten erg onveilig en je maakt op die manier een grote lek in jou systeem. Een goed script maakt ook geen gebruik van Exit();
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.
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.
exit == luiheid || exit == onderdeel_van_applicatie
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.
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.
Sessies controleer ikzelf niet zozeer, gebruikers id word gewoon opgeslagen. Dit omdat sessies over het algemeen wel veilig zijn (sessie-hijacking blijft een risico, maar user-agent en IP adres controles veranderen daar weinig aan)
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.
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.



