Toon posts:

[php]Discussietopic 'keeping state'

Pagina: 1
Acties:

Verwijderd

Topicstarter
Wat vind jij nu het beste om status (winkelwagen, surfgedrag etc) en authenticatie bij te houden?
- php4 sessies
- cookies met een md5 hash van username+password+hashvar welke bij iedere keer dat een beveiligde pagina geladen wordt tegen de database gevalideerd worden.
- phplib sessies
- je hebt een eigen sessie library gemaakt waar je niet zonder mee kunt

ik zelf gebruik voornamelijk php4 sessies met een paar eigenfuncties daarom heen. Toch voel ik me er nooit helemaal gelukkig bij, mensen slaan er een username in op en zolang die geset is is iemand ingelogd. Het wachtwoord wordt na inloggen (bijna) nooit meer gecheckt. Bij de cookie methode wordt het username/wachtwoord combi bij iedere keer dat de pagina geladen wordt weer geverifieerd.

uw ideeen graag! :-)

Verwijderd

Dit is typisch iets voor sessies, sessies dus. Of je dan php4 sessions gebruikt, phplib sessions (bestaat phplib nog? :D ) of een eigen sessie systeem maakt geen zak uit, maar ik zou gewoon voor de standaard php4 sessies gaan omdat die overal werken.

Waarom zou je je password steeds opnieuw checken dan? Je kunt een sessie (die aan de server kant draait) niet via de browser aanpassen, dus dat is wel redelijk veilig.

Verwijderd

ik sla alle boodschappen op in de database met een column waarin de sessie ID staat, deze sessie ID sla ik ook op als cookie voor als mensen later willen verdergaan met winkelen

Verwijderd

Topicstarter
sessies zijn redelijk veilig. Maar ik weet niet of het je is opgevallen, maar als je sessies aan je url meegeeft kun je hierin wel editten (in het cookie trouwens ook) wat nou als je zegt url/sessievoorbeeld.php?PHPSESSID=1
in mijn /tmp dir wordt de sessie met waarde 1 gewoon aangemaakt en gebruikt.

Stel ik maak een pagina (even ervanuitgaande dat ie druk bezocht is) die links heeft naar een php pagina die sessies bijhoudt en afhankelijk van het aantal bezoeken laat ik PHPSESSID die ik aan die site meegeef steeds incrementen. In theorie zou ik dan met een kwartiertje wachten sessies kunnen kapen door gewoon zelf naar die url te gaan en PHPSESSID=1 t/m 100 proberen. De kracht van sessies is dat die variabelen moeilijk te raden zijn, maar op deze manier dus niet meer.


PS.
Ja phplib bestaat nog, laatste versie is van januari dit jaar en er gaan geluiden op dat het in PEAR opgenomen gaat worden.

  • thomaske
  • Registratie: Juni 2000
  • Laatst online: 14-07 14:28

thomaske

» » » » » »

Verwijderd schreef op 14 augustus 2002 @ 17:28:
sessies zijn redelijk veilig. Maar ik weet niet of het je is opgevallen, maar als je sessies aan je url meegeeft kun je hierin wel editten (in het cookie trouwens ook) wat nou als je zegt url/sessievoorbeeld.php?PHPSESSID=1
in mijn /tmp dir wordt de sessie met waarde 1 gewoon aangemaakt en gebruikt.
...
Maar gelukkig worden de sessionid's door php zelf gegenereerd, en zijn ze 32 karakters lang! ;)

Brusselmans: "Continuïteit bestaat niet, tenzij in zinloze vorm. Iets wat continu is, is obsessief, dus ziekelijk, dus oninteressant, dus zinloos."


  • Zoijar
  • Registratie: September 2001
  • Niet online

Zoijar

Because he doesn't row...

Vandaar dat je bij erg belangrijke acties de user opnieuw zijn wachtwoord laat invoeren. En het is ook verstandig om het client IP (en bv browser versie oid) aan een sessie te koppelen.

En een PHP Session ID is geloof ik 128bit, dat geeft ~3,4E38 mogelijken ids. Stel dat de website op het moment 1 miljoen active visitors heeft (veeeeel) dan heb je nog steeds maar een kans van 1 op 3,4E33 om een ID te raden. Heb nu ff geen zin om verwachtingswaarde uit te rekenen, maar ik denk dat als je elke 300ms een poging doet je toch echt langer bezig bent dan het heelal tot nu toe bestaat. (het duurt minder lang om het wachtwoord bruteforce te kraken ;) )

Het probleem met kapen van sessies is dat derden de data op voorbij zien komen op het netwerk. Iemand anders kan dus zo zien "oh daemian vraag view?PHPSESSID=1234, haha, nu weet ik z'n sessie id en vraag ik lekker delete?PHPSESSID=1234 op.

Verwijderd

Topicstarter
dat klopt, maar als je een zelfverzonnen id meegeeft start dus automatisch een nieuwe sessie met dat zelfverzonnen id. Als ik bijv hier dus een link plaats naar een pagina waar ik zo'n zelfverzonnen id, is het een kwestie van tijd voor ik die sessie kan gaan kapen. Om wat voor reden dan ook. Ik weet dat het een beetje ver gezocht is. Maar ik vraag me toch af of dit niet als bug in php gezien kan worden.

  • Zoijar
  • Registratie: September 2001
  • Niet online

Zoijar

Because he doesn't row...

Ok ik snap wat je bedoelt. Koppel dan een IP aan je sessie, dan gaat het niet meer op. (tenzij je dus weer je IP spoofed naar de server) Misschien een beetje slordig van PHP dat ze niet iets wat meer build-in maatregelen nemen tegen sessie kapen. Maar ik denk dat het expres is gedaan, omdat als die manieren niet altijd werken.

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 28-08 12:00

Janoz

Moderator Devschuur®

!litemod

PHP is meer gemaakt om simpel een dynamische website op te kunnen zetten, en niet om veilig een dynamische website op te zetten. Nu het zo populair is geworden moeten ze dat een beetje terug gaan draaien (zie globals on naar off). De sessies van php zijn gewoon gemaakt om het de devver wat makkelijker te maken en niet om een zo veilig mogelijk systeem in elkaar te zetten.

Zelf gebruik ik meestal gewoon de standaard sessies. Ze voldoen aan de eisen die ik er aan stel. Ik ben echter wel van plan om binnenkort zelf een wat uitgebreidere sessionhandler te schrijven omdat ik soms nog wel eens wat functionaliteiten mis. Dat zou ik kunnen omzeilen door de handlers van de standaard sessie aan te passen, maar ik ga liever voor een eigen systeem.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Verwijderd

Topicstarter
Zoijar: Extra maatregelen tegen sessie kapen zouden handig zijn geweest maar maar daar valt nog omheen te programmeren, ik vind het alleen slordig dat php geen check heeft die kijkt of de sessie op de server ook bestaat, en als ie niet bestaat dat de meegegeven sessie gewoon genegeerd wordt en er een nieuwe random id gecreeerd wordt. Dat is naar mijn idee een elegantere manier dan gewoon zeggen 'bestaat ie nog niet, nou nu wel dus'

Janoz: ooit was php idd bedoeld voor eenvoudige zaken. Maar eigenlijk is het argument dat jij noemt een de redenen geweest waarom de php developers met de overgang van php 3 naar php 4 gekozen hebben om php 4 van de grond af aan opnieuw te bouwen. Sessie functionaliteit is echter pas in 4 toegevoegd. Globals on of off is een config instelling die ze nu standaard op off hebben staan, bij een beetje developer stond die al op off. :)

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Neehoor, als je een sessieid meegeeft en die bestaat niet maakt php een nieuwe sessie met hetzelfde id aan bij mijn weten.

  • martinvw
  • Registratie: Februari 2002
  • Laatst online: 14-12-2025
Dat wordt volgens mij ook gezegd :-S
Maar er wordt gezegd dat het beter zou zijn als er een check op zou zitten, toch?
Pagina: 1