opslaan in sessie veilig?

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Ozzie PHP

Ozzie PHP

10/10/2012 16:11:08
Quote Anchor link
Hallo,

Moet je een sessie eigenlijk beschouwen als een veilige opslagmethode? Of is een sessie minder veilig vanwege session hijacking?

Ik vraag dit vanwege het volgende. Ik wil een contactformulier op een website plaatsen. Om het formulier te versturen moet iemand zijn naam en mailadres invullen. Nu vraag ik me af of ik deze naam en mailadres zal opslaan in de sessie, zodat als de bezoeker weer terugkomt op het contactformulier (gedurende diezelfde sessie) en nogmaals contact wil opnemen, zijn of haar naam en mailadres automatisch zijn ingevuld. Dit lijkt me wel gebruiksvriendelijk, maar ik vraag me af of het veiligheidsrisico's met zich meebrengt. Of zijn die te verwaarlozen?
 
PHP hulp

PHP hulp

04/12/2024 09:34:44
 
Ward van der Put
Moderator

Ward van der Put

10/10/2012 16:37:36
Quote Anchor link
In dit geval zou ik het niet doen om twee redenen:

• De kans dat een gebruiker tijdens de huidige sessie opnieuw het contactformulier gebruikt, is erg klein. (Je kunt het achteraf zelfs meten: grote kans dat je op minder dan op 1 : 1000 uitkomt.)

• Wordt het enkele minuten geleden ingevulde contactformulier opnieuw gebruikt, dan zullen de meeste browsers dat tegenwoordig versneld invullen met een AutoComplete.

Uiteindelijk bepaalt deze afweging je keuze: je hebt gegevens die zelden worden hergebruikt in de sessie, maar die wel zouden kunnen worden misbruikt. Omdat het slechts een contactformulier is, dicteert wijsheid dat het risico groter is dan de opbrengst en zou je het dus niet moeten doen.
Gewijzigd op 10/10/2012 16:38:28 door Ward van der Put
 
Ozzie PHP

Ozzie PHP

10/10/2012 16:46:06
Quote Anchor link
Ward, ik ben het met je eens dat de kans niet groot is... maar laten we dan voor het gemak een ander (totaal fictief!!) voorbeeld nemen...

Een formulier voor een prijsvraag... klant moet naam invullen, mailadres, woonplaats, adres, postcode, geboortedatum, klantnummer... het formulier bestaat uit 2 pagina's. Op pagina 2 moet de klant een slogan invullen...

De klant besluit na het invullen van pagina 1 nog even terug te gaan naar de speluitleg. Vervolgens gaat hij weer terug naar het formulier. Aiii! Alle gegevens zijn verdwenen. Dan was het toch mooi geweest als het in sessie had gestaan. Maar mijn vraag is dus meer "hoe veilig is een sessie"? Als je geen sessie-id in de url gebruikt, kan de sessie dan toch gekaapt worden enz.
 
Ward van der Put
Moderator

Ward van der Put

10/10/2012 17:08:12
Quote Anchor link
In algemene termen moet je twee dingen doen: voor persoonsgegevens sowieso altijd SSL gebruiken en daarnaast (bijna) alles opentrekken dat PHP standaard aan boord heeft om sessies veiliger te maken.

Je vraag "hoe veilig is een sessie?" begint bij een andere vraag: hoe veilig is je server? Zonder die paar tientjes per jaar meer voor een SSL-certificaat is het antwoord per definitie: onveilig.

Pas daarna stort je je op het beveiligen van sessies.
 
Kris Peeters

Kris Peeters

10/10/2012 17:38:48
Quote Anchor link
Ik vind dat we op deze vraag meestal geen antwoord krijgen dat voldoening geeft.

Wanneer we het hebben over SQL-injection krijgen we wel deftige antwoorden, omdat we duidelijk kunnen demonstreren hoe de hacker te werk gaat.
( $_POST['user'] = "' OR '1"; ... )
We simuleren wat er gebeurt en de TS ziet met eigen ogen dat we gelijk hebben.

Zo'n duidelijk antwoord krijgen we meestal niet voor het probleem waarvan hier sprake is.
Als ik dit lees: http://nl.wikipedia.org/wiki/Session_hijacking , lijkt de conclusie me vooral: de hacker steelt de cookie met de sessiesleutel.

Dit maakt dat de server de hacker ziet als zijnde "ingelogd".
Maar verder maakt het weinig uit wat je precies in de $_SESSION array steekt.
Het is niet alsof ze die variabelen zomaar kunnen uitlezen.
Je moet meer inzitten met: "Wat kan een ingelogde gebruiker aan schade aanrichten?" wetende dat het een hacker kan zijn.

Maar don't take my word for it, ik zou er ook wel graag meer over weten.
Gewijzigd op 10/10/2012 17:40:58 door Kris Peeters
 
Ward van der Put
Moderator

Ward van der Put

10/10/2012 17:58:51
Quote Anchor link
Kris, er is ook geen kant-en-klare oplossing, omdat de beveiliging afhankelijk is van wat een sessie allemaal bewaart én toelaat.

In het eerste voorbeeld van Ozzie worden in het ongunstigste geval naam en e-mailadres vrijgegeven via de gehackte sessie. In zijn tweede voorbeeld gaat Ozzie veel verder en slaat hij ook adresgegevens, geboortedatum en klantnummer op in de sessie. Dat zijn twee onvergelijkbare gevallen en die kun je niet automatisch dichttimmeren met één totaaloplossing.

Het prachtige van PHP is nu juist: als er één totaaloplossing duidelijk superieur is, dan wordt die gewoon ingebouwd. Die is er dus voorlopig nog niet.
 
Kris Peeters

Kris Peeters

10/10/2012 18:37:44
Quote Anchor link
Ja, okay, ik verwacht ook zeker geen kant-en-klare oplossing.
Ik zou vooral willen weten wat specifiek het probleem is; wat precies een hacker wel en niet kan zien/doen/veranderen.

Bij voorbeeld de simpele vraag: kan een hacker de session-variabelen lezen?

Daar krijg ik geen helder antwoord op. Om eerlijk te zijn, lijkt dit me niet het geval te zijn.
en laat me heel duidelijk zijn, ik zou graag horen dat ik me hier vergis ... maar dan met duidelijke en betrouwbare bronnen.

Met wat ik gelezen heb, kan ik enkel opmaken dat iemand de authentificatie kan faken. Dus krijgt de hacker de rechten die een ingelogde heeft (reken daar ook de Admin account bij).

... en als dit juist is, maakt het bitter weinig uit wat je wel of niet opslaat in de $_SESSION array; maar moet je je op totaal andere dingen focussen.
Gewijzigd op 10/10/2012 18:40:02 door Kris Peeters
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.