[php] Alternatief voor $HTTP_REFERER?

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik gebruik $HTTP_REFERER (of $_SERVER['HTTP_REFERER'], da's het zelfde) om de exacte url te bepalen die een bezoeker heeft ingevuld, maar o.a. op php.net staat dat dat niet helemaal betrouwbaar is. Niet alle browsers vullen die var altijd goed in enzo.

Ik wil bijvoorbeeld onderscheid maken tussen of iemand naar www.mijnsite.nl gaat of ietsanders.mijnsite.nl, beide url's verwijzen gewoon naar mijnsite.nl en komen dus op mijnsite.nl/index.php uit. Aan de hand van $HTTP_REFERER bepaal ik dan of ik naar www (dus de gewone site) of naar het "ietsanders" gedeelte wil.

Het is niet voor beveiligde shit ofzo, dus dat mensen die $HTTP_REFERER kunnen forceren maakt me niet uit. Het is alleen vervelend als het gewoon in veel gevallen niet werkt.

Is er een alternatief waarmee ik kan achterhalen welke url men heeft gebruikt? Of is $HTTP_REFERER toch wel zo algemeen ondersteund dat het daar wel mee kan.

Acties:
  • 0 Henk 'm!

  • LuCarD
  • Registratie: Januari 2000
  • Niet online

LuCarD

Certified BUFH

maak eens een bestand aan met een phpinfo() daarin.

Dan kun je zien welke systeem variablen ( zoals HTTP_REFERER ) je allemaal hebt en kunt gebruiken...

of kijk hier eens:
http://www.php.net/manual...reserved.variables.server

[ Voor 25% gewijzigd door LuCarD op 05-05-2003 12:09 ]

Programmer - an organism that turns coffee into software.


Acties:
  • 0 Henk 'm!

  • Michali
  • Registratie: Juli 2002
  • Laatst online: 29-05 22:54
Wat jij nodig hebt is $_SERVER['HTTP_HOST'] en niet Referer. Als de gebruiker dus ietsander.mijnsite.nl heeft ingetypt dan heeft $_SERVER['HTTP_HOST'] ook die waarde.
Je kunt het dus heel gemakkelijk zo gebruiken:
PHP:
1
2
3
4
5
6
7
8
9
10
11
switch ( $_SERVER['HTTP_HOST'] )
{
    case 'ietsanders.mijnsite.nl':
        include 'pagina1.php';
    break;
    case 'mijnsite.nl', 'www.mijnsite.nl':
        include 'pagina2.php';
    break;
    default:
        include 'pagina3.php';
}

Noushka's Magnificent Dream | Unity


Acties:
  • 0 Henk 'm!

  • cybermans
  • Registratie: Maart 2001
  • Laatst online: 17-09 09:56
hoe er wel rekening mee dat dit is te faken. ALs je bv een socket opent met php naar de web server toe en dan kan je precies mee geven wat je wilt als referer. 100% betrouwbaar is data van client nooit.

Strava | Runkeeper | Endomondo (mijn leikr uploads)


Acties:
  • 0 Henk 'm!

  • InZane
  • Registratie: Oktober 2000
  • Laatst online: 17-09 13:15
cybermans schreef op 05 mei 2003 @ 12:23:
hoe er wel rekening mee dat dit is te faken. ALs je bv een socket opent met php naar de web server toe en dan kan je precies mee geven wat je wilt als referer. 100% betrouwbaar is data van client nooit.
Verwijderd schreef op 05 mei 2003 @ 12:05:
Het is niet voor beveiligde shit ofzo, dus dat mensen die $HTTP_REFERER kunnen forceren maakt me niet uit. Het is alleen vervelend als het gewoon in veel gevallen niet werkt.
Lezen is ook een vak he ;)

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Thanks. Ik had al een php'tje gemaakt met daarin phpinfo(INFO_ALL) en die vergeleken voor 2 url's, wazig genoeg zie ik nu dat HTTP_HOST en SERVER_NAME precies bevatten wat ik wil.

En HTTP_REFERER komt nergens meer voor (die had ik de vorige keer juist als enige gevonden), terwijl print($HTTP_REFERER) het nog steeds wel doet!? :?

Maar goed, ik gebruik maar die $SERVER_NAME denk ik, gezien de omschrijving op php.net lijkt me dat de meest betrouwbare (voor virtual hosting althans, en dat gebruik ik :))

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Michali schreef op 05 May 2003 @ 12:21:
Wat jij nodig hebt is $_SERVER['HTTP_HOST'] en niet Referer.
Oh, toch HTTP_HOST dus en niet SERVER_NAME?

Volgens php.net:

HTTP_HOST = Contents of the Host: header from the current request, if there is one.

SERVER_NAME = The name of the server host under which the current script is executing. If the script is running on a virtual host, this will be the value defined for that virtual host.

Gezien dat "if there is one" bij HTTP_HOST neem ik aan dat dat niet per se altijd het geval is? En aangezien ik op een vritual host zit, leek mij die SERVER_NAME dus betrouwbaarder. Of maakt het allemaal geen zak uit :)

Acties:
  • 0 Henk 'm!

  • thomaske
  • Registratie: Juni 2000
  • Laatst online: 17-09 07:55

thomaske

» » » » » »

Verwijderd schreef op 05 mei 2003 @ 12:38:
En HTTP_REFERER komt nergens meer voor (die had ik de vorige keer juist als enige gevonden), terwijl print($HTTP_REFERER) het nog steeds wel doet!? :?
HTTP_REFERER is alleen gevuld wanneer je van een andere pagina komt. Als je de pagina direct aanroept in je url-balk, heb je natuurlijk geen referen

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


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
thomaske schreef op 05 May 2003 @ 14:13:
HTTP_REFERER is alleen gevuld wanneer je van een andere pagina komt. Als je de pagina direct aanroept in je url-balk, heb je natuurlijk geen referen
Dat is vreemd, want als ik rechtstreeks het url intiep van een page die die $HTTP_REFERER toont, bestaat hij wel degelijk... :?

Acties:
  • 0 Henk 'm!

  • eborn
  • Registratie: April 2000
  • Laatst online: 16-09 09:14
Verwijderd schreef op 05 May 2003 @ 16:57:
Dat is vreemd, want als ik rechtstreeks het url intiep van een page die die $HTTP_REFERER toont, bestaat hij wel degelijk... :?
En staat er ook wat in dan? :)

Acties:
  • 0 Henk 'm!

  • Crazy D
  • Registratie: Augustus 2000
  • Laatst online: 14:14

Crazy D

I think we should take a look.

Verwijderd schreef op 05 May 2003 @ 12:43:
Gezien dat "if there is one" bij HTTP_HOST neem ik aan dat dat niet per se altijd het geval is? En aangezien ik op een vritual host zit, leek mij die SERVER_NAME dus betrouwbaarder. Of maakt het allemaal geen zak uit :)
Op mijn site is SERVER_NAME altijd www.mijndomein.net, als ik blaat.mijndomein.net opvraag, heeft aleen HTTP_HOST de juiste naam (de rest is nog steeds www.mijndomein.net). Maar anders doe je toch een dubbele check.. eerst op http_host, en als die leeg blijkt te zijn, alsnog server_name..... :)

Exact expert nodig?

Pagina: 1