login  Naam:   Wachtwoord: 
Registreer je!
 Forum

session safe?

Offline vinTage - 10/03/2010 01:00
Avatar van vinTageNieuw lid Zelf was ik er altijd van overtuigd dat session variables "safe" waren.
Met safe bedoel ik dat de waarde van een session niet overschreven kan worden zonder een serverside language.

Ik weet wel dat als iemand je sessionID te pakken krijgt (hoe maakt ff niet uit), hij je session kan overnemen, maar dat is hier niet van belang.
Ik wil gewoon weten of je de waarde van een sessie kan aanpassen.

Natuurlijk probeerde ik webdevtoolabr, maar daarin stond alleen het sessionID wat ik kon aanpassen, er stond niets van de overige gestarte sessions.

Als dus eea WEL te doen is door clienteel, kan je dan zeggen hoe, zodat ik het zelf kan testen/beveiligen?

Alvast bedankt en sowieso voor het lezen.

55 antwoorden

Gesponsorde links
Offline nick5556 - 10/03/2010 07:35 (laatste wijziging 10/03/2010 07:38)
Avatar van nick5556 PHP beginner Is session niet gewoon het zelfde als post? Je kan het niet zien, maar volgensmij is het mogelijk om aan te passen.

Tadaa: KLIKSKE

Oftewel, sessie staat serverside, zodra je de user-input in de sessie zet controleer deze dan eerst goed, sessie ID zouden ze kunnen doorgeven via een cookie, maar je bent niet al te slim als je dat doet.
Offline vinTage - 10/03/2010 08:37
Avatar van vinTage Nieuw lid Daarin staat exact wat ik al zei.
Ik ben heus wel bekend met sessions, en weet dat ze serverside staan, ik ben alleen bezig met een app waarbij ik niet wil dat er geknoeid kan worden met de inhoud van een sessie die ik ze geef.
Offline Ontani - 10/03/2010 09:07 (laatste wijziging 10/03/2010 09:08)
Avatar van Ontani Gouden medailleGouden medailleGouden medailleGouden medaille

-1
Standaard zijn sessions veilig.
Hetzelfde als standaard een database veilig is.

Maar ga je gebruikersinput toevoegen aan je sessie of je database dan controleer je die op "evil" input, anders zouden er wel eens dingen kunnen lopen zoals je niet wilt.
Offline Wave6 - 10/03/2010 09:22
Avatar van Wave6 PHP beginner Dan zal ik gewoon voor HTTPS gaan:) Als het echt heel erg gevoelige data is dan leg je dit niet vast in een sessie lijkt mij.
Offline vinTage - 10/03/2010 09:32
Avatar van vinTage Nieuw lid Die https komt er idd ook, maar dat is toch meer voor dat je op een veilige lijn zit (kan niet sniffen bv) maar het "probleem" blijft toch hetzelfde? (als er al een probleem is natuurlijk)

De sessions krijgen door mij een inhoud toegewezen, ik zie "voorlopig" niet hoe hun zelf die waarde kunnen aanpassen, dat is mijn enige probleempje.
Ik ging er al vanuit dat het veilig was, maar had ooit ergens een gelezen (geen idee meer waar) dat sessions te manipuleren waren, dit wil ik dus uitsluiten.


Offline Ontani - 10/03/2010 09:46
Avatar van Ontani Gouden medailleGouden medailleGouden medailleGouden medaille

-1
Als je iets in de aard doet van:
$_SESSION['username'] = $_POST['username']

En ergens echo $_SESSION['username']; dan zie je de bui al hangen natuurlijk.

Maar natuurlijk kan dat geen andere session variabele verranderen.
Offline vinTage - 10/03/2010 09:52
Avatar van vinTage Nieuw lid :P
Nee, de session krijgt een inhoud uit mijn database, die ik daar zelf inzet.
Het wordt gewoon een soort wachtwoord.

Mijn ding is: stel dat iemand random die wachtwoorden kan uitproberen, dan krijgt die mss informatie of rechten die helemaal niet bij hem horen.
De sessions ken ik toe als er is ingelogged met het juiste emailadres en wachtwoord (niet "dat" wachtwoord)
Offline Wave6 - 10/03/2010 10:38 (laatste wijziging 10/03/2010 10:40)
Avatar van Wave6 PHP beginner
  1. <?php
  2. ini_set('session.save_path', '/pad/buiten/htdocs/');
  3. //dit verwijs je in ieder geval naar een directorie waar niemand bij kan.
  4. ini_set('session.name', 'hash'); # try to hide the session name..
  5. //hiermee geef je aan of de naam van de sessie encrypted moet zijn of niet.
  6. if (!isset($_SESSION['ip']))
  7. $_SESSION['ip'] = $_SERVER['REMOTE_ADDR'];
  8. if ($_SESSION['ip'] != $_SERVER['REMOTE_ADDR'];
  9. trigger_error("Session Capture detected!", E_USER_WARNING);
  10. ?>



$_SERVER['REMOTE_ADDR'] is het echte IP adres! Zodra deze anders is als $_SESSION['ip'].
Dan weet je in ieder geval zeker dat de sessie gefaked is.
Dus wat je moet doen... is een sessie bijhouden waar het IP adres van de ingelogde gebruiker in staat.

Door deze code voorkom je gegarandeerd dat sessies te faken zijn:)
Bedankt door: Koen
Offline Koen - 10/03/2010 13:28
Avatar van Koen PHP expert Sessies worden op de server opgeslagen en zijn dus niet aanpasbaar voor iemand die geen toegang heeft tot de server. 
Offline Wave6 - 10/03/2010 13:33
Avatar van Wave6 PHP beginner @Koen,

Een sessie is ook niet te bewerken.
Maar hij is wel te hijacken.
En mijn bovenstaande oplossing voorkomt dit.

Offline vinTage - 10/03/2010 13:35
Avatar van vinTage Nieuw lid Het is zeker een bruikbare tip en ga ik ook zeker nader bekijken/toepassen  
Offline Wave6 - 10/03/2010 13:58
Avatar van Wave6 PHP beginner Tof!

Laat even het vervolg weten! Want ik ben benieuwd:)
Offline vinTage - 10/03/2010 14:58
Avatar van vinTage Nieuw lid
  1. ini_set('session.save_path', '/pad/buiten/htdocs/');
  2. ini_set('session.name', 'hash');

Op mn localhost (wamp) lukt dit iig niet, ik kan local de ini natuurlijk zelf aanpassen, maar dat kan ik niet op de host.
wat die 'hash' precies doet is me niet helemaal duidelijk, ik zie gewoon een nummer bij het de value van het sessionid.
Ik weet dus niet of het op een "echte" host dus wel gaat werken, maar ik neem aan van wel 

Verder denk ik dat gewoon die ipcheck al voldoende is om hijacking tegen te gaan.
Offline Wave6 - 10/03/2010 15:16 (laatste wijziging 10/03/2010 15:17)
Avatar van Wave6 PHP beginner Oke dat tuurlijk.
Maar de reden dat ik altijd me save_path buiten me htdocs zet is omdat.
Stel dat er 1 authenticated user is met kwaadaardige bedoelingen. Deze heeft dan in ieder geval het recht om de sessie directorie te lezen als deze binnen de htdocs is gedefinieerd.(is meer als voldoende om schade aan te richten).
Plaats je deze buiten je HTDocs dan weet je in ieder geval 100% zeker dat deze niet zomaar gelezen/bewerkt wordt.

en zoals jij al zegt werk jij op WAMP(=windows) maar '/pad/buiten/htdocs/' is een unix based path. vandaar het conflict waarschijnlijk.
jij zou iets van C:/xamp/sessions/ kunnen gebruiken als session path.

Verder is vaak inderdaad een IP check wel voldoende om sessies te checken.
Ik gebruik dat ini_set enkel en alleen maar zodat ik alle opties per website(in mijn cms) kan aanpassen:)

Sommige websites willen bijvoorbeeld sessies zelf bijhouden in de database bijvoorbeeld.

Hoe dank ook, ik wens je verder veel succes!

Groetjes,
Wesley A.K.A D_O
Bedankt door: vinTage
Offline vinTage - 10/03/2010 15:29
Avatar van vinTage Nieuw lid thx voor de uitleg.

Ik heb op mn local even het volgende getest:

en kreeg daar het exacte pad te zien, ik heb dezelfde file toen even op mn host gezet, en daar kwam er helemaal niets te staan.
Dus dat zal denk ik wel (be)veilig(t) zijn 
Bedankt door: Wave6
Offline Wave6 - 10/03/2010 15:32
Avatar van Wave6 PHP beginner Super!;)
Offline vinTage - 10/03/2010 15:44
Avatar van vinTage Nieuw lid Zit een beetje te brainstormen, maar volgens mij is alleen een ipcheck niet 100% veilig?

Want "stel" dat je van iemand het sessionID weet, dan hoef je alleen zelf een keer in te loggen zodat die ip-session geset wordt en daarna handmatig het sessionID aan te passen via webdevtoolbar....toch?

Ik denk dat dit een betere versie is:
  1. if( $_SESSION['ingelogged'] != sha1($_SERVER['REMOTE_ADDR'].session_id() )
  2. {
  3. //fout
  4. }


Maar nogmaals, ben maar aan het brainstormen :0
Offline Wave6 - 10/03/2010 15:54
Avatar van Wave6 PHP beginner SessionID van een sessie via webdevtoolbar aanpassen kan niet 
Dit geld alleen voor cookies een cookie is ook gewoon een sessie maar dan client side.
Dit verklaart de SESSIONID in de webdevtoolbar 
Offline lemoinet - 10/03/2010 15:55
Avatar van lemoinet PHP gevorderde dit artikel heb ik zelf ook gebruikt. Het maakt wel gebruik van Zend, maar het principe is hetzelfde

http://devzone....-Zend-Auth
Offline Wave6 - 10/03/2010 16:00
Avatar van Wave6 PHP beginner @Lemoinet,

Zend-Auth zou inderdaad een superieure oplossing zijn!
Alleen is dit voor vinTage niet echt relevant.
Aangezien hij volgens mij verder geen Zend Framework gebruikt in deze code.

Bovendien is Zend-Auth groot en vrij complex. En zal vinTage meer werk opleveren dan nodig is op dit moment.

Maar je inzet wordt vast en zeker zeer gewaardeerd... in ieder geval door mij 
Offline vinTage - 10/03/2010 16:04 (laatste wijziging 10/03/2010 16:06)
Avatar van vinTage Nieuw lid
D_O schreef:
SessionID van een sessie via webdevtoolbar aanpassen kan niet 

Maar ik kan dat wel aanpassen naar het id van iemand anders en dan ben ik nog "binnen", hetzelfde als je met het id in de url zou prutsen 

Mondje vol die zend_auth dingens, daar ben ik wel even zoet mee 

edit, ik maak idd geen gebruik van zend of eender welk php framework.
Aangezien ik wel een redlijk groot project maak had ik me beter wel kunnen verdiepen, maarja, das voor V2 
Offline Wave6 - 10/03/2010 16:08
Avatar van Wave6 PHP beginner Nu kun je dat misschien locaal.

Maar server side kan dit niet.
En bovendien niemand kan zomaar de SESSIEID opvragen van een sessie op de server.
Daarom is je session save_path zo belangrijk:)
Offline vinTage - 10/03/2010 16:12
Avatar van vinTage Nieuw lid Als ik de waarde van dit cookie verander (het id "nr" dus) dan werkt dat toch gewoon ?
Ik ga dat toch eens testen 

en idd, het opvragen van die id's zal niet zo simpel zijn 
Offline Joost - 10/03/2010 16:26 (laatste wijziging 10/03/2010 16:27)
Avatar van Joost PHP expert Stel, gebruiker A logt in. Zijn ip wordt opgeslagen in een sessie om hijacken te voorkomen.
Gebruiker B wil de sessie hijacken. Hij komt achter het sessie ID van A, en stelt deze in als zijn sessie ID. De waarde van $_SESSION['ip'] zal dus het IP zijn van gebruiker A, welke ongelijk is aan het IP van gebruiker B.
Als gebruiker B al was ingelogd, heeft zijn $_SESSION['ip'] de waarde van zijn eigen IP, ja, maar als hij dan de sessie van gebruiker A hijacked, krijgt hij ook $_SESSION['ip'] van gebruiker A, welke dan anders is.

Dus nee, als de hijacker zelf inlogt, lukt het trucje ook niet 
Offline vinTage - 10/03/2010 16:45 (laatste wijziging 10/03/2010 17:23)
Avatar van vinTage Nieuw lid Eigenwijs dat ik ben heb ik het lekker toch getest en your all right, het werkt echt niet 


EDIT, het werkt wel, ik kan wel iemand zn sessie kapen!!
Okay de controles zorgen dat je er niet veel mee kan, maar het werkt wel degelijk...

http://www.vintagesworld.be/zooi/sessieding.php

Offline Jelmerholland - 10/03/2010 18:32
Avatar van Jelmerholland PHP beginner 1) Het is ingelogd, niet ingelogged, dat is een misbaksel van het engels 
2) Hoe laat je van die color-coding zien op je site? (Ik heb binnenkort ook zoiets nodig)
3) Wat zie ik daar? Ik zie alleen wat de sessionID is, en wat m'n naam en ip is. Maar wat zie ik verder? Hoe laat je hier mee zien dat je niet kan hijacken? (Of is dat niet je bedoeling?)
Offline vinTage - 10/03/2010 18:57 (laatste wijziging 10/03/2010 18:58)
Avatar van vinTage Nieuw lid 1) wtf @ engels, het is maar een testscriptje.
2) zie de code ? (laatste regel)
3) als je nou op computer 1 daarheen gaat en geeft daar een naam in en ramt op go.
Met computer 2 ga je ook daarheen en session id die boven in beeld staat bij computer 1 zet je in computer 2 middels de webdevtoolbar als value voor het SESSIONID cookie, refrech de page op comp2 en check de dump onderin, je hebt daar de sessionnaam van computer 1.

Voordat er geroepen gaat worden, ik heb het met 2 verschillende computers gechecked die alletwee een ander ip hadden 

En om het nog harder te bewijzen, log in met een naam, onthoud de naam en plaats hier het sessionid, als de session nog bestaat ten tijde dat ik het hier check, dan zeg ik welke naam je in hebt gevoerd daar.
Offline TotempaaltJ - 10/03/2010 19:20 (laatste wijziging 10/03/2010 19:26)
Avatar van TotempaaltJ PHP interesse Een sessie is een bestand op de server, met als naam een hash van tijd en ip adres (ofzo). Dezelfde hash staat op de computer van de gebruiker in een cookie. Die zou in principe kunnen aanpassen, maar dan moet je de hash van een andere sessie weten. Dit kan je in ieder geval voorkomen door alle gebruikerinput te checken en escapen etc.

REMOTE_ADDR is voor zover ik weet te vervalsen (kheb even wat gegoogled), dus dit is niet echt de beste manier om het te beveiligen.

Een echt volledig veilige sessie maken is voor zover ik weet onmogelijk, maar als je de userinput goed controleert is er een gigantisch kleine kans dat iemand het nog hackt.
Offline Jelmerholland - 10/03/2010 19:21
Avatar van Jelmerholland PHP beginner Maar toch, het is niet goed engels, en ook voor een testscript lijkt het me handig goed engels (of in dit geval, nederlands) te gebruiken.

Dat 'highlight_file(__FILE__);'? Nice, ik dacht dat er een beste code bij kwam kijken 

Owh ok, op die manier ;)

En ik geloof je wel, dat is het probleem niet, maar ik vroeg me 't gewoon ff af Want ik snapte niet echt wat ik nou eigenlijk zag... snappie?
Offline vinTage - 10/03/2010 19:23
Avatar van vinTage Nieuw lid dr komt helemaal geen userinput in.
En je hebt zeker niet het voorgaande scriptje getest ? Ik neem daar zo je session over (mits ik het session_id weet natuurlijk en dat is niet zomaar te achterhalen).
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.232s