[PHP] Opvangen URL van 'includer'

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • BlueAce
  • Registratie: November 2002
  • Laatst online: 09-01-2021
In een plain-HTML pagina include ik het volgende:

code:
1
<script src="http://www.domein.nl/script.php" type="text/javascript"></script>


In script.php zou ik graag het adres weten van de pagina waar het geinclude wordt, maar hoe?

Via PHP kom ik uit op $_SERVER['HTTP_HOST'], maar die geeft me dus de URL van script.php terug B) Ik zou ook nog de URL in een get-statement kunnen meegeven aan script.php, maar de bedoeling van het opvangen via een variabele is juist dat je dan weet dat er niet gelogen wordt over die URL.

Bestaat er dus een variabele in PHP waar ik mee kan werken? Ik heb de lijst van reserved variables al even doorgebladert, maar zonder success.

Thx alvast!

[ Voor 26% gewijzigd door BlueAce op 20-05-2005 20:58 ]


Acties:
  • 0 Henk 'm!

  • LuCarD
  • Registratie: Januari 2000
  • Niet online

LuCarD

Certified BUFH

HTTP_REFERER, maar deze word door de client mee gestuurd. En kan worden vervalst

Programmer - an organism that turns coffee into software.


Acties:
  • 0 Henk 'm!

  • X-Lars
  • Registratie: Januari 2004
  • Niet online

X-Lars

Just GoT it.

Met sessions kan het wel.

Acties:
  • 0 Henk 'm!

  • LuCarD
  • Registratie: Januari 2000
  • Niet online

LuCarD

Certified BUFH

Ow? Hoe doe je dat met meerdere domeinen?

[ Voor 7% gewijzigd door LuCarD op 20-05-2005 17:38 ]

Programmer - an organism that turns coffee into software.


Acties:
  • 0 Henk 'm!

  • BlueAce
  • Registratie: November 2002
  • Laatst online: 09-01-2021
LuCarD schreef op vrijdag 20 mei 2005 @ 17:35:
HTTP_REFERER, maar deze word door de client mee gestuurd. En kan worden vervalst
Inderdaad, lijkt me niet echt safe.
Hoe zie je dat voor je over verschillende domeinen? ;) [edit] Lucard was me voor.

[ Voor 6% gewijzigd door BlueAce op 20-05-2005 17:40 ]


Acties:
  • 0 Henk 'm!

  • X-Lars
  • Registratie: Januari 2004
  • Niet online

X-Lars

Just GoT it.

Ik kon nergens uit afleiden dat het script op een ander domein stond :)

Acties:
  • 0 Henk 'm!

  • Jig
  • Registratie: Mei 2003
  • Laatst online: 21:40

Jig

Met h4x.
En spanx.
Modbreak:Doe dat eens niet... Het is hier de HK niet. :/

[ Voor 62% gewijzigd door NMe op 20-05-2005 21:56 ]


Acties:
  • 0 Henk 'm!

  • BlueAce
  • Registratie: November 2002
  • Laatst online: 09-01-2021
X-Lars schreef op vrijdag 20 mei 2005 @ 17:40:
Ik kon nergens uit afleiden dat het script op een ander domein stond :)
Soz, bij deze :)

Acties:
  • 0 Henk 'm!

  • BlueAce
  • Registratie: November 2002
  • Laatst online: 09-01-2021
LuCarD schreef op vrijdag 20 mei 2005 @ 17:35:
HTTP_REFERER, maar deze word door de client mee gestuurd. En kan worden vervalst
Ik heb echt alles geprobeerd nu, maar dat is de enige variabele waar ik mee kan werken. Ik heb ergens wel eens gehoord dat hij vervalst kan worden, dus daarom ben ik het met je eens, maar nu twijfel ik toch. Is het zo dat ik HTTP_REFERER kan veranderen, zodat het net lijkt alsof het script wordt geinclude vanaf www.gooddomain.com, maar eigenlijk staat het op www.evildomain.com? Nee toch? Als je het script direct aanroept kun je er niks mee, dan krijg je gewoon plain-text voorgeschoteld.

[ Voor 10% gewijzigd door BlueAce op 20-05-2005 20:59 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Ik denk niet dat je dit betrouwbaar kan doen. Twee alternatieven die ik zo kan bedenken zijn:

• HTTP_REFERER -- kan zoals gezegd vervalsd worden, of geblockt door sommige "internet protectors"
• Een parameter erbij in de aanroep:

code:
1
<script src="http://myserver.com/script.php?ref=http://www.anderepagina.nl/"></script>


En dit kan evengoed vervalsd worden.


Maar wat ik me tegelijk afvraag: heb je dit echt nodig, en zo ja, waarvoor? Want misschien is er een eenvoudiger alternatief.

[ Voor 30% gewijzigd door Verwijderd op 20-05-2005 21:18 ]


Acties:
  • 0 Henk 'm!

  • BlueAce
  • Registratie: November 2002
  • Laatst online: 09-01-2021
Nou het volledige idee ga ik hier niet neerzetten, maar het komt erop neer dat je geen account hoeft aan te maken voor de service maar dat het script gewoon checkt welk domein hem aanroept. Dat kan dus niet veilig, jammer maar helaas.

Misschien wat vaag uitgelegd maar ik wil er niet al teveel over kwijt als ik eerlijk ben O-)

Thx in ieder geval y'all, ik weet genoeg :)

[ Voor 46% gewijzigd door BlueAce op 20-05-2005 21:28 ]


Acties:
  • 0 Henk 'm!

  • Norjee
  • Registratie: April 2000
  • Niet online
BlueAce schreef op vrijdag 20 mei 2005 @ 20:58:
[...]
Ik heb echt alles geprobeerd nu, maar dat is de enige variabele waar ik mee kan werken. Ik heb ergens wel eens gehoord dat hij vervalst kan worden, dus daarom ben ik het met je eens, maar nu twijfel ik toch. Is het zo dat ik HTTP_REFERER kan veranderen, zodat het net lijkt alsof het script wordt geinclude vanaf www.gooddomain.com, maar eigenlijk staat het op www.evildomain.com? Nee toch? Als je het script direct aanroept kun je er niks mee, dan krijg je gewoon plain-text voorgeschoteld.
Ja, dat kan.. niet direct, maar wel indirect. Als ik op evildomain.com doe:
PHP:
1
<script src="fetch.php?url=http://www.domein.nl/script.php" type="text/javascript"></script>

en mijn fetch.php speelt proxy, en vervangt de refferer header, dan kan dat..

Overigens is die refferer header wel de enige oplossing, dus je moet maar accepteren dat er gecheat kan worden..

Wil je het toch veilig, dan kost dat wat meer moeite voor de domeinen waarop/aan jij het script aanbied. Wat wel zou werken is:

- maak een script wat een random id genereerd
- geef gooddomain een id en password waarmee hij op jou server dat id kan aanvragen
- in he script waarin je het random id genereerd sla je nu op dat id x bij domain y hoort
- laat gooddomain script opvragen en het id meesturen http://www.domein.nl/script.php?id=gegevenid
- zorg ervoor dat dit id slechts 1 maal te gebruiken is, en na een korte tijd niet meer geldig is
- in script.php kijk je nu naar het id, kijk je bij welke site dit id hoort, controleerd de refferet nog eens met ditdomein en doe je je ding.

Let wel op: er is ook software (nav geloof ik) welke de refferer uit de headers haalt...

Nu ik erover nadenk, dit is nog niet veilig...
als evildomain zijnde request ik nu eerst de pagina op gooddomain, haal het id uit de html zooi, en vervolgels doe ik mijn proxy truukje weer, en geef jou id door..
Op evildomain krijg ik nu wel het script dat bedoelt was voor gooddomain, maar ik kan nog wel knoeien dus..

Tenzij je gooddomain het script niet op een publiekelijk toegankelijke plaats neerzet zal evilsite er op de een of andere manier altijd bij kunnen komen. Het enige wat echt veilig is, is dit niet clientside af te handelen, maar volledig serverside.


edit:
En ook laten registreren zal dus niet veel helpen, omdatevil domein het script dan nog steeds van gooddomain of kan halen

[ Voor 6% gewijzigd door Norjee op 20-05-2005 21:31 ]


Acties:
  • 0 Henk 'm!

  • BlueAce
  • Registratie: November 2002
  • Laatst online: 09-01-2021
Norjee schreef op vrijdag 20 mei 2005 @ 21:29:
[...]
Tenzij je gooddomain het script niet op een publiekelijk toegankelijke plaats neerzet zal evilsite er op de een of andere manier altijd bij kunnen komen. Het enige wat echt veilig is, is dit niet clientside af te handelen, maar volledig serverside.


edit:
En ook laten registreren zal dus niet veel helpen, omdatevil domein het script dan nog steeds van gooddomain of kan halen
Helemaal gelijk. Voor zover ik kan zien betekend het gebruik van de <script>-include dat je vanaf elk domein die URL kan benaderen, en dat is in mijn geval nou juist NIET de bedoeling.

Waarom verzin ik altijd onmogelijke shit :/

Acties:
  • 0 Henk 'm!

  • BlueAce
  • Registratie: November 2002
  • Laatst online: 09-01-2021
Schiet me ineens wat te binnen: is window.location.href wel een 'veilige' variabele, of kun je die ook met een proxy (zoals die eerder beschreven wordt) omzeilen? Ik zou namelijk via XMLHttpRequest die Javascript variabele naar PHP kunnen transferen :)

Acties:
  • 0 Henk 'm!

Verwijderd

Je zou het wel kunnen doen via een username/pw in de link, en dat over https gooien (beetje overdreven, maar veiliger (kan niet veranderd worden door een proxy)). Of denk ik daar nou te makkelijk over?

Acties:
  • 0 Henk 'm!

  • vriesdude
  • Registratie: Februari 2002
  • Laatst online: 19-09 19:14
ies simpeler misschien maar geinspireerd door de laatste paar reactie's...

laat een unieke en eenmalig geldende code verzinnen.
maak op het gooddomain de unique code aan (op basis van IP en time en maak er een md5 oid van)
doe het volgende op gooddomain.

PHP:
1
2
3
4
5
6
<?php

$md5= md5($_SERVER['remote_addr'] . time());   //+ een unieke hash eigenlijk
header("location: http://domein.nl?hash=".$md5);

?>


op deze manier ziet de gebruiker de link niet totdat de pagina al geopend word. De kans is kleiner dat een gebuiker dit onderschept.

MAAR: 100% veilig is het niet. Als de gebruiker ze internet uitzet, dan krijgt ie de link te zien. en kan die die weer misbruiken vanaf EVILHOST.
MAAR: daarom laat ik een time mee hashen. Die zou je weer kunnen controleren door hetzelfde te hashen... (bedenk me wel dat je dan geen md5 kunt gebruiken maar een codering die je ook weer terug kunt halen). Doormiddel van de time kun je een 10 seconde limit instellen om gebruiker weinig tijd te geven om te kloten.

Als je echt de gebruiker wantrouwd zou je nog op gooddomain een database kunnen bijhouden zoals ook al eerder aangegeven en daarin onthouden wie er op domein.nl mag komen.

maarnogmaals: dit krijg je niet 100% waterdicht zonder https achtige dingen.

/dev/null


Acties:
  • 0 Henk 'm!

  • Norjee
  • Registratie: April 2000
  • Niet online
BlueAce:
Wat wil je nu precies?? Want jou idee rammelt een beetje, en zal vast wel op een clientside only manier net zo goed willen, desnoods door de benodige data aan te bieden via soap/xmlrpc of een andere webservice.
Wat jij nou wil doen, ergens in je js zetten:
code:
1
goodDomain = window.location.href
Kan ik dan weer in mijn clumsy php proxy loader op baddomain.com aanpassen door
PHP:
1
str_replace("window.location.href" , "heellliefschattigonschuldigkonijntje.nl")
En weer ben je terug bij af..

Maar als jij een simpel iets aanbied waar je verder geen geld voor vraagt, dan laat je toch gewoon toe dat dit gebeurd?? who cares.. Veel mensen zullen niet de moeite nemen tenzij jouw idee werkelijk revolutionair is..

KingOfDos:
Alles wat je met een webbrowser kan laden kan je faken dus via een proxy laden, dus ook als het via https doet ;) Denk bijvoorbeeld aan http://nl2.php.net/curl

Acties:
  • 0 Henk 'm!

  • BlueAce
  • Registratie: November 2002
  • Laatst online: 09-01-2021
Tja als ik eerlijk ben wil ik er niet teveel over vertellen, misschien dat het daarom onduidelijk is :) Maar je hebt wel gelijk: zo'n drama is het niet als mensen via een omweg dat script voor een bepaalde site kunnen aanroepen. Als ze het maar niet 123 dat script kunnen includen op hun eigen site, dan vind ik het best.

Ik zit nu overigens met het probleem dat XMLHttpRequest niet cross-site werkt vanwege permission-issues. Geen flauw idee wat ik daartegen moet doen, als ik wat rondzoek dan zie ik hierover ook veel twijfel. Is dat een nieuwe thread of mag ik hier de oplossing vragen?
Pagina: 1