opslaan in sessie veilig?
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?
• 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
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.
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.
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
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.
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