[PHP/AJAX] Probleem met $_SESSION

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Zenda
  • Registratie: Oktober 2001
  • Laatst online: 06-09 16:17

Zenda

goes milk!

Topicstarter
Ik maak gebruik van een uploader die wanneer je op 'upload' klikt een AJAX request stuurt naar 'upload.php'.

In upload.php check ik of de gebruiker die de 'upload.php' aanroept wel echt is ingelogd en check of hij wel in dat album mag uploaden om zo misbruik te voorkomen.

In FireFox (zowel 2 als 3) kan hij de $_SESSION niet uitlezen, maar het bizarre is dat 'ie het in IE7 wel goed doet. Ik test dit door simpelweg een var_dump te echo-en van $_SESSION.

Code:
code:
1
2
3
4
5
6
7
<?php
    include('config.php');
    include('classes/thumbnail.php');
    
    echo 'WTF? ' . $_SESSION['id'] . ' ' . $_SERVER['REMOTE_ADDR'] . ' ' . $_SESSION['pw'] . '<P>';
    
if ($user = CheckLogin($_SESSION['id'], $_SERVER['REMOTE_ADDR'], $_SESSION['pw']))


In config.php staat session_start, maar heb het ook al eens in het bestand zelf geschreven. Ook dit hielp niet.

Hoop dat iemand weet waar ik het kan zoeken :)

Zenda likes some milk every now and then..


Acties:
  • 0 Henk 'm!

  • Bozozo
  • Registratie: Januari 2005
  • Laatst online: 20-02 16:10

Bozozo

Your ad here?

Post ook eens hoe je die session variabelen zet. Heb je dat goed gedebugged?

TabCinema : NiftySplit


Acties:
  • 0 Henk 'm!

  • Zenda
  • Registratie: Oktober 2001
  • Laatst online: 06-09 16:17

Zenda

goes milk!

Topicstarter
Ja die sessions bestaan wel.. Heb die hele website al bijna af en dit is het enige waar hij moeilijk doet met sessions.

Sessions set ik op deze manier:

$_SESSION['id'] = $row['id'];

Lijkt me niks mis mee :)

Zenda likes some milk every now and then..


Acties:
  • 0 Henk 'm!

  • GlowMouse
  • Registratie: November 2002
  • Niet online
Die if in je code is altijd waar.

Heb je die code ergens online staan?

Acties:
  • 0 Henk 'm!

  • Zenda
  • Registratie: Oktober 2001
  • Laatst online: 06-09 16:17

Zenda

goes milk!

Topicstarter
ff online gezet: http://pastebin.com/m24d5d2df

die if is trouwens niet altijd waar, want dan had ik nu geen problemen :)

Zenda likes some milk every now and then..


Acties:
  • 0 Henk 'm!

  • GlowMouse
  • Registratie: November 2002
  • Niet online
Zenda schreef op dinsdag 29 juli 2008 @ 12:48:
die if is trouwens niet altijd waar, want dan had ik nu geen problemen :)
Dan heb je de code verkeerd overgetikt ipv gecopy/paste, want $a = 'iets' is altijd waar. Bij een vergelijking gebruik je ==.

En met code online bedoelde ik zo klaar om te zien dat het fout gaat, dus dat de code ook uitgevoerd wordt :)

[ Voor 15% gewijzigd door GlowMouse op 29-07-2008 12:49 ]


Acties:
  • 0 Henk 'm!

  • Zenda
  • Registratie: Oktober 2001
  • Laatst online: 06-09 16:17

Zenda

goes milk!

Topicstarter
Nee die heb ik niet online helaas, maar ik gebruik FancyUpload als AJAX uploader. Werkt gewoon, maar niet met de SESSION erin dus :/

Zenda likes some milk every now and then..


Acties:
  • 0 Henk 'm!

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 21:47

Creepy

Tactical Espionage Splatterer

GlowMouse schreef op dinsdag 29 juli 2008 @ 12:49:
[...]

Dan heb je de code verkeerd overgetikt ipv gecopy/paste, want $a = 'iets' is altijd waar. Bij een vergelijking gebruik je ==.
Tenzij de checkfunctie false teruggeeft indien de check faalt ;)
offtopic:
Maar wel krom dat de functie false teruggeeft als de check faat en een user als de check lukt

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


Acties:
  • 0 Henk 'm!

  • CH4OS
  • Registratie: April 2002
  • Niet online

CH4OS

It's a kind of magic

GlowMouse schreef op dinsdag 29 juli 2008 @ 12:43:
Die if in je code is altijd waar.

Heb je die code ergens online staan?
Die IF-lus is sowieso niet goed, want er vind geeneens een vergelijking plaats ook... ;)

@TS:
if($var) checkt of de variabele bestaat ja of nee, bestaat 'ie (volgens mij ook nog is ongeacht value), dan word hetgeen binnen de IF-lus uitgevoerd en is het dus altijd true, zoals GlowMouse ook aangeeft.

Je moet $user dus eerst aanmaken, voor je bijvoorbeeld checkt of 'ie true of false is...

EDIT:
Hmmm... Internet is atm niet vooruit te branden hier... :S

[ Voor 5% gewijzigd door CH4OS op 29-07-2008 13:06 ]


Acties:
  • 0 Henk 'm!

  • GlowMouse
  • Registratie: November 2002
  • Niet online
Creepy schreef op dinsdag 29 juli 2008 @ 12:53:
[...]

Tenzij de checkfunctie false teruggeeft indien de check faalt ;)
hee maf, ik dacht altijd dat een assignment true teruggeeft, maar hij de waarde van de variabele terug
GJ-tje schreef op dinsdag 29 juli 2008 @ 12:54:
[...]
if($var) checkt of de variabele bestaat ja of nee, bestaat 'ie (volgens mij ook nog is ongeacht value)
Nee, hier wordt $var naar een boolean omgezet. Wat daaruit komt kun je bepalen adhv de tabel bovenaan deze pagina.

[ Voor 40% gewijzigd door GlowMouse op 29-07-2008 12:59 ]


Acties:
  • 0 Henk 'm!

  • Zenda
  • Registratie: Oktober 2001
  • Laatst online: 06-09 16:17

Zenda

goes milk!

Topicstarter
k, tnx voor dat :) vervangen naar:

$user = CheckLogin(..);
if (!empty($user))
{
}

Iemand nog suggesties over waarom niet $_SESSION in FireFox en wel in IE? :)

Zenda likes some milk every now and then..


Acties:
  • 0 Henk 'm!

  • sky-
  • Registratie: November 2005
  • Niet online

sky-

qn nna 👌

Doe eens print_r($_SESSION) en kijk of je wel waardes hebt.

don't be afraid of machines, be afraid of the people who build and train them.


Acties:
  • 0 Henk 'm!

  • Zenda
  • Registratie: Oktober 2001
  • Laatst online: 06-09 16:17

Zenda

goes milk!

Topicstarter
Dat is dus het rare, ook gedaan met var_dump() maar in IE zegtie:

array(4) { ["id"]=> string(1) "1" ["ip"]=> string(14) "93.122.175.222" ["pw"]=> string(40) "*snip*" ["views"]=> array(1) { [2]=> int(1) } }

En in FireFox:

Array ( )

[ Voor 8% gewijzigd door Creepy op 29-07-2008 13:27 ]

Zenda likes some milk every now and then..


Acties:
  • 0 Henk 'm!

  • CH4OS
  • Registratie: April 2002
  • Niet online

CH4OS

It's a kind of magic

Zenda schreef op dinsdag 29 juli 2008 @ 12:57:
$user = CheckLogin(..);
if (!empty($user))
{
}
Is het niet verstandiger te controleren op een bepaalde waarde die CheckLogin wel of niet teruggeeft? Dus meer in de trant van

PHP:
1
2
3
4
if($user == true) //Als je ook zeker wilt zijn dat het type hetzelfde is kan je er nog === van maken... ;)
{
    //doe je ding
}
?
Zenda schreef op dinsdag 29 juli 2008 @ 13:12:
Dat is dus het rare, ook gedaan met var_dump() maar in IE zegtie:

array(4) { ["id"]=> string(1) "1" ["ip"]=> string(14) "93.122.175.222" ["pw"]=> string(40) "*snip*" ["views"]=> array(1) { [2]=> int(1) } }

En in FireFox:

Array ( )
Met FF lijkt het er dus op, dat je geen sessie hebt. Probeer is een session_start() te gooien in het upload.php bestand... :)

[ Voor 39% gewijzigd door Creepy op 29-07-2008 13:27 ]


Acties:
  • 0 Henk 'm!

  • Zenda
  • Registratie: Oktober 2001
  • Laatst online: 06-09 16:17

Zenda

goes milk!

Topicstarter
Ja is verstandiger, dank je wel.

Zenda likes some milk every now and then..


Acties:
  • 0 Henk 'm!

  • Depress
  • Registratie: Mei 2005
  • Laatst online: 18-09 22:29
Ik heb het idee dat Fx geen cookies meestuurt naar ja AJAX script. En ja, cookies, omdat sessions via cookies werken.

Het kan eventueel een security setting zijn van Fx, als je Fx reset lukt het dan ook niet?

Acties:
  • 0 Henk 'm!

  • Zenda
  • Registratie: Oktober 2001
  • Laatst online: 06-09 16:17

Zenda

goes milk!

Topicstarter
Al een keer geprobeerd, zit nu ook wat op andere termen te google-en en lees nu idd dat het kan komen door een security feature die FireFox heeft, waarom!?@$!@%@$T%^#$.. Ik lees nog ff verder, zal wel ff updates posten die ik tegenkom.

Zenda likes some milk every now and then..


Acties:
  • 0 Henk 'm!

  • Depress
  • Registratie: Mei 2005
  • Laatst online: 18-09 22:29
Ik ben er zelf even in blijven hangen hoe je jou probleem kunt omzeilen.

Wat je zou kunnen doen is een $_SESSION koppelen in je DB aan een user. Hier genereer je bij elke (auto)login een unieke hash op basis van md5()/sha1() en microtime(). Tevens koppel je deze hash aan een IP en eventueel zelfs een browser versie.

Deze unieke hash geef je me via je AJAX request en deze checkt in de database of de HASH aan een geldige $_SESSION hangt, samen met alle andere variable die je gebruikt om de user te indentificeren.

Acties:
  • 0 Henk 'm!

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 21:47

Creepy

Tactical Espionage Splatterer

offtopic:
Ik heb je ge-MD5-de wachtwoord even verwijderd. Laten we hopen dat dat niet een echt bruikbaar wachtwoord is, gezien hte wachtwoord is dat niet het geval maar toch ;) Meteen een extra tip: hash niet alleen je wachtwoord maar plak er wat voor of achter. In dit geval heeft iemand met een dictionary attack het wachtwoord achterhaald, en nee, ik was dat niet ;)

[ Voor 50% gewijzigd door Creepy op 29-07-2008 13:32 ]

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


Acties:
  • 0 Henk 'm!

  • Zenda
  • Registratie: Oktober 2001
  • Laatst online: 06-09 16:17

Zenda

goes milk!

Topicstarter
Heel goed idee! Ik ga het meteen proberen :D Want hoe langer ik Google lees ik steeds meer AJAX request PHP session problemen.

@Creepy, dat was geen MD5 wachtwoord, maar toch bedankt voor het meedenken :)

[ Voor 23% gewijzigd door Zenda op 29-07-2008 13:32 ]

Zenda likes some milk every now and then..


Acties:
  • 0 Henk 'm!

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 21:47

Creepy

Tactical Espionage Splatterer

offtopic:
Toch grappig, want volgens een andere gebruiker leverde de MD5 van een bepaald woord precies het wachtwoord op dat je poste ;)

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


Acties:
  • 0 Henk 'm!

  • Zenda
  • Registratie: Oktober 2001
  • Laatst online: 06-09 16:17

Zenda

goes milk!

Topicstarter
Ehm? Het is een sha1() hash, vaag dan! Nu ben ik wel benieuwd wat eruit kwam dan..

Zenda likes some milk every now and then..


Acties:
  • 0 Henk 'm!

  • GlowMouse
  • Registratie: November 2002
  • Niet online
Kwam van mij, mea culpa, het was inderdaad sha1 :)

Het lijkt me trouwens toch dat je ergens iet met cookies fout doet. Sessies en AJAX zou prima samen moeten werken.

[ Voor 54% gewijzigd door GlowMouse op 29-07-2008 13:40 ]


Acties:
  • 0 Henk 'm!

  • Japius
  • Registratie: April 2003
  • Laatst online: 30-08 20:57
Zenda schreef op dinsdag 29 juli 2008 @ 12:51:
Nee die heb ik niet online helaas, maar ik gebruik FancyUpload als AJAX uploader.
De FancyUpload van digitarald?
Flash-request forgets cookies and session ID

Flash FileReference is not an intelligent upload class, the request will not have the browser cookies, Flash saves his own cookies. When you have sessions, append them as get-data to the the URL (e.g. “upload.php?SESSID=123456789abcdef”). Of course your session-name can be different.

Acties:
  • 0 Henk 'm!

  • Zenda
  • Registratie: Oktober 2001
  • Laatst online: 06-09 16:17

Zenda

goes milk!

Topicstarter
Ah, daar heb ik overheen gelezen. Ik vind het toch veiliger om het d.m.v. een hash te doen zoals eerder werd aangegeven dus het topic is niet voor niets :). Zo ziet de gebruiker de SESSION inhoud iig niet waardoor je ook niet in staat bent om het te misbruiken.

Wel raar trouwens dat het in IE wel werkt.. IE ftw!! _/-\o_ ;)

[ Voor 11% gewijzigd door Zenda op 29-07-2008 13:52 ]

Zenda likes some milk every now and then..


Acties:
  • 0 Henk 'm!

  • Zenda
  • Registratie: Oktober 2001
  • Laatst online: 06-09 16:17

Zenda

goes milk!

Topicstarter
Nou het is gelukt! Tnx iedereen voor hun hulp.

Ik heb nu een tabel aangemaakt met velden als: tid, aid, hash, hash_ip en hash_datum.

tid = userid
aid = album
hash = gegenereerde sha1 hash
hash_ip = IP adres gebruiker
hash_datum = datetime

Op het moment van het aanvragen van de upload pagina genereerd hij een hash a.d.h.v SESSION id, pw, ip en microtime().

Zodra er op 'upload' wordt geklikt en AJAX request wordt verstuurd, checked hij of de hash bestaat en controleert hij of de hash niet ouder is dan 5 minuten (ze hebben dus 5 minuten, 300 seconden de tijd om hun bestanden te selecteren en te uploaden. Tijd zat toch?

code:
1
$sql = "SELECT tid,aid FROM upload_hash WHERE hash_ip = '" . $_SERVER['REMOTE_ADDR'] . "' AND hash = '" . $_GET['upload'] . "' AND hash_datum + INTERVAL 5 MINUTE > NOW()";


Vervolgens selecteert hij het album (aid) en kijkt hij of de gebruiker wel eigenaar is van dat album en upload vervolgens de bestanden. Deze check had ik er eerst nog niet inzitten, maar leek me ook wel verstandig!

Probleem dus opgelost, tnx Tweakers!

Zenda likes some milk every now and then..


Acties:
  • 0 Henk 'm!

  • GlowMouse
  • Registratie: November 2002
  • Niet online
Zenda schreef op dinsdag 29 juli 2008 @ 13:51:
Ah, daar heb ik overheen gelezen. Ik vind het toch veiliger om het d.m.v. een hash te doen zoals eerder werd aangegeven
Waarin verschilt een sessid van de hash die je nu gebruikt?
Pagina: 1