Versio

Veiligheid login

Overzicht Reageren

Michael -

Michael -

24/07/2010 12:42:49
Quote Anchor link
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?

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
<?php
//sessie maken
$_SESSION['hash'] = sha1($_SERVER['HTTP_USER_AGENT']);

//controleren
if($_SESSION['hash'] == sha1($_SERVER['HTTP_USER_AGENT']))
   echo 'Jij bent de goede gebruiker';
?>

Zou dit veilig zijn?

Jullie nog veilige(re) ideeen?
 
PHP hulp

PHP hulp

25/05/2012 17:30:41
Gesponsorde koppelingen:
BHosted Hosting al vanaf € 1,- per maand

Controleer nu gratis jouw domeinnaam:

  
 
Maestro Roboroads

Maestro Roboroads

24/07/2010 18:41:31
Quote Anchor link
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.
 
Victor Php

Victor Php

24/07/2010 19:08:02
Quote Anchor link
Nooit een wachtwoord in een sessie!!
 
Joren de Wit
Beheerder

Joren de Wit

24/07/2010 19:10:22
Quote Anchor link
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 ;-)
 
Michael -

Michael -

25/07/2010 05:07:18
Quote Anchor link
@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.
 
Pim -

Pim -

25/07/2010 14:55:44
Quote Anchor link
Wat is er mis met exit(), mits goed gebruikt?
 
Michael -

Michael -

25/07/2010 16:21:52
Quote Anchor link
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.
 
P Lekensteyn

P Lekensteyn

25/07/2010 17:19:28
Quote Anchor link
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.
 
Johan Dam

Johan Dam

26/07/2010 09:31:21
Quote Anchor link
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.
 



Overzicht Reageren