[js] (php-)scripts van een andere server gebruiken

Pagina: 1
Acties:
  • 813 views sinds 30-01-2008
  • Reageer

Acties:
  • 0 Henk 'm!

  • marty
  • Registratie: Augustus 2002
  • Laatst online: 27-03-2023
Ik twijfelde een beetje tussen /13 en /14, maar zoek eigenlijk naar een javascript oplossing, vandaar mijn post hier.

Wat ik wil bereiken:
Op servers die geen serverside-scripttalen ondersteunen toch services zoals een gastenboek of email-formulier gebruiken.

Hoe zie ik dat ongeveer voor me (met bijvoorbeeld een gastenboek)
Een hele zooi javascript spreekt een script op een server aan die wél een serverside-scripttaal ondersteund (PHP bijvoorbeeld) en op die manier kan de inhoud van een gastenboek worden weergegeven, berichten geplaatst, etc.

Wat heb ik al geprobeerd
- Ik heb allereerst een file op een PHP-ondersteunende-server gezet die - afhankelijk van de request op die file - een bericht plaats of berichten weergeeft
- Het berichten plaatsen is geen punt: ik post het formulier naar het bestand op die server (check daarbij de referer!), verwerk de request daar en stuur 'm vervolgens (via de header() functie in PHP) weer terug naar de referer. So far so good
- Berichten weergeven is wel een punt! :( Dit dacht ik te doen door gebruik te maken van het xmlHTTPRequest object. Die spreekt dat bestand aan en gooit de output in een DIV ofzo en dan ziet men het gastenboek. Niet dus ... want een beveiliging zorgt ervoor dat ik geen bestanden op een andere server kan openen
code:
1
2
var xmlHttp = XmlHttp.create();
xmlHttp.open("GET", sUri, bAsync);
geeft dus een permission denied

Ik heb even verder zitten denken hoe ik dit op een andere manier zou kunnen oplossen en heb twee dingen bedacht:
1. De javascript-file op dezelfde server zetten als waar het php-bestand staat. Heb ik eerlijk gezegd nog niet uitgeprobeerd, maar ook al werkt dat, dan heb ik daar nog weinig aan omdat ik dan de referer niet meer kan checken. En aan de hand daarvan wil ik controleren van welke site+script men een bericht wil plaatsen en zo nodig de actie niet toestaan (waarschijnlijk kan dit wel gefaked worden, maar ik vermoed dat mensen die moeite niet gaan nemen. Dan kunnen ze net zo goed rechtstreeks in het gastenboek gaan lopen spammen).
2. Een (i)frame :r
Daar wil ik dus niet aan. (en bovendien zit ik dan weer met het referer-probleem)

Iemand een idee hoe dit op te lossen is?

Acties:
  • 0 Henk 'm!

  • crisp
  • Registratie: Februari 2000
  • Nu online

crisp

Devver

Pixelated

Ik denk dat betrouwbaarheid van de referrer nog niet je grootste probleem is; de aanwezigheid ervan echter wel aangezien producten als Norton Firewall/Internet Security standaard referrers onderdrukken ;)

referrer checking is leuk om hotlinking tegen te gaan, maar absoluut niet geschikt voor dit soort zaken.

[ Voor 21% gewijzigd door crisp op 12-07-2005 17:53 ]

Intentionally left blank


Acties:
  • 0 Henk 'm!

  • marty
  • Registratie: Augustus 2002
  • Laatst online: 27-03-2023
crisp schreef op dinsdag 12 juli 2005 @ 17:45:
Ik denk dat betrouwbaarheid van de referrer nog niet je grootste probleem is; de aanwezigheid ervan echter wel aangezien producten als Norton Firewall/Internet Security standaard referrers onderdrukken ;)

referrer checking is leuk om hotlinking tegen te gaan, maar absoluut niet geschikt voor dit soort zaken.
Die knippen dus gewoon de refererer uit de headers die de browser meestuurt?
Da's mooi k** dan.

Ok, nieuw probleem dan:
Iemand enig idee hoe ik op een beetje betrouwbare manier iets anders kan gebruiken om te kijken wie van het script gebruik maakt?

Acties:
  • 0 Henk 'm!

  • djluc
  • Registratie: Oktober 2002
  • Nu online
Je zou een soort van installatie-pagina op je eigen site kunnen plaatsen. Dit zie je ook vaak bij statistieken-programma's. Dan genereer je de HTML die de gebruikers op de site moeten plaatsen. Vraag ze naar de url van de site->sla deze op in de DB->genereer een unieke ID->plaats deze in de HTML.

Je kan dan statistisch nog met de referer checken of niemand misbruik maakt omdat je dan ook van andere domeinen veel referers gaat krijgen dan het domein wat er bij hoort.

Acties:
  • 0 Henk 'm!

  • André
  • Registratie: Maart 2002
  • Laatst online: 03-07 10:30

André

Analytics dude

Wat misschien een optie is is om het op de PHP server op te slaan in XML formaat. Dat kun je prima cross-domain parsen met JS :)

Acties:
  • 0 Henk 'm!

  • marty
  • Registratie: Augustus 2002
  • Laatst online: 27-03-2023
marty schreef op dinsdag 12 juli 2005 @ 21:48:
[...]
Die knippen dus gewoon de refererer uit de headers die de browser meestuurt?
Da's mooi k** dan.
Hmmm..ik zit daar nog eens over na te denken, maar die referer komt natuurlijk helemaal niet via de browser. Als een script op server A een script op server B aanspreekt dan gaat dat buiten de gebruiker (die een pagina op server A bekijkt) om. En dat is eigenlijk ook wat ik wilde :)
Of hebben windows servers met Norton er evengoed last van dat die referers onderdrukt worden in dit geval?
djluc schreef op dinsdag 12 juli 2005 @ 21:59:
Je zou een soort van installatie-pagina op je eigen site kunnen plaatsen. Dit zie je ook vaak bij statistieken-programma's. Dan genereer je de HTML die de gebruikers op de site moeten plaatsen. Vraag ze naar de url van de site->sla deze op in de DB->genereer een unieke ID->plaats deze in de HTML.

Je kan dan statistisch nog met de referer checken of niemand misbruik maakt omdat je dan ook van andere domeinen veel referers gaat krijgen dan het domein wat er bij hoort.
Dat is dus ook precies wat ik gedaan heb ;)
Ik heb een tabel gastenboek aangemaakt en een gastenboek-preferences tabel. In die preferences tabel sla ik bij een user-id de instellingen op en ook de referer, dus de pagina waar het gastenboek staat. Op die manier wil ik voorkomen dat hetzelfde gastenboek ook op een andere pagina kan draaien. Op het moment dat de PHP-file dan wordt aangesproken haal ik mbv de referer het user-id op en met dat user-id haal ik vervolgens alle relevante berichten uit de gastenboek-tabel op.
André schreef op dinsdag 12 juli 2005 @ 22:08:
Wat misschien een optie is is om het op de PHP server op te slaan in XML formaat. Dat kun je prima cross-domain parsen met JS :)
Dat klinkt interessant! :) Ik ga het even onderzoeken.

Acties:
  • 0 Henk 'm!

  • marty
  • Registratie: Augustus 2002
  • Laatst online: 27-03-2023
André, heb je heel toevallig een linkje voor me? Ik ben gaan googlen, maar kom er niet helemaal uit. Het dichts in de buurt wat ik kon vinden was dit:
http://www.howtodothings.com/ViewArticle.aspx?article=92
maar dat is IE only. Ik heb geen vergelijkbare oplossing kunnen vinden die ook in Mozilla werkt.

Ik snap trouwens ook niet zo goed waarom ze in godsnaam zo moeilijk doen over het laden van externe files via javascript. Waarom zou dat een security hazard zijn? Ik moet zeggen dat ik het hiermee pp koch @ thelist eens ben. Hij lijkt er daar overigens van overtuigd dat het niet mogelijk is?

Acties:
  • 0 Henk 'm!

  • djluc
  • Registratie: Oktober 2002
  • Nu online
Op die manier wil ik voorkomen dat hetzelfde gastenboek ook op een andere pagina kan draaien.
En dat is dus niet goed. Je kan het alleen als statistische info gebruiken. Je kan in je admin dus iets tonen als: "Let op! Meer dan 50% van de referers van gastenboek X klopt niet!" Maar je kan hiermee dus niet zomaar zeggen bij iedere aanvraag: IF(REFERER == REFERER in DB) { toon berichten }

Acties:
  • 0 Henk 'm!

  • marty
  • Registratie: Augustus 2002
  • Laatst online: 27-03-2023
djluc schreef op woensdag 13 juli 2005 @ 10:42:
[...]
En dat is dus niet goed. Je kan het alleen als statistische info gebruiken. Je kan in je admin dus iets tonen als: "Let op! Meer dan 50% van de referers van gastenboek X klopt niet!" Maar je kan hiermee dus niet zomaar zeggen bij iedere aanvraag: IF(REFERER == REFERER in DB) { toon berichten }
Ja, maar wat schiet ik daarmee op? Ik gooi het liever gewoon dicht voor verkeerde referers.
Zijn er echt webservers dan die geen referer doorgeven?

Aan de andere kant ... misschien ben ik ook wel te paranoia en moet ik er niet van uitgaan dat iemand gaat lopen klooien door het gastenboek van iemand anders op z'n eigen pagina te zetten. En ik kan idd de referer opslaan om te achterhalen of het toch gebeurt ... Laat ik dat maar doen dan, dan gaat het tenminst zeker nooit mis

Maargoed, da's van secundair belang op dit moment. Ik heb liever een oplossing voor het cross-domain probleem waar ik mee zit :)

Acties:
  • 0 Henk 'm!

  • djluc
  • Registratie: Oktober 2002
  • Nu online
Ja, maar wat schiet ik daarmee op? Ik gooi het liever gewoon dicht voor verkeerde referers.
Zijn er echt webservers dan die geen referer doorgeven?
Nee, maar clients wel. Dichtgooien is tegenwoordig echt not-done. De producten die referers verpesten zijn echt te breed verspreid. Het achterhalen lijkt me wel een goed idee.

Ik zag toevallig net een topic waarin ze een afbeelding ge(mis)bruiken om op een ander domein een script uit te voeren. Daar zit geen controle op. Ik weet niet of je daarmee ook gegevens op kunt halen.

Acties:
  • 0 Henk 'm!

  • marty
  • Registratie: Augustus 2002
  • Laatst online: 27-03-2023
djluc schreef op woensdag 13 juli 2005 @ 11:39:
[...]
Nee, maar clients wel. Dichtgooien is tegenwoordig echt not-done. De producten die referers verpesten zijn echt te breed verspreid. Het achterhalen lijkt me wel een goed idee.
Ah, ik zat met een gedachten-kronkel. Als de html/js code van een bestand op server A een bestand op server B nodig heeft dan wordt dat uiteraard door de browser afgehandeld en niet door server A 8)7
Ik zag toevallig net een topic waarin ze een afbeelding ge(mis)bruiken om op een ander domein een script uit te voeren. Daar zit geen controle op. Ik weet niet of je daarmee ook gegevens op kunt halen.
Hmm...ik zou niet weten hoe.

Niemand verder een idee waar ik meer informatie over de suggestie van André kan vinden zodat ik dit crossbrowser (en crossdomain :*) ) compatibel krijg?

Acties:
  • 0 Henk 'm!

  • André
  • Registratie: Maart 2002
  • Laatst online: 03-07 10:30

André

Analytics dude

crisp heeft in zijn GoTTracker een stuk code zitten waarmee in IE en FF je XML kunt parsen :) Ik heb zo even geen link beschikbaar.

  • marty
  • Registratie: Augustus 2002
  • Laatst online: 27-03-2023
Die parser van Crisp vond ik toch geen goede oplossing. Die vereist namelijk dat je als gebruiker nog wat aan je browser-instellingen moet gaan klooien en dat is voor tweakers geen probleem natuurlijk, maar voor een gastenboek waar iedere jan *** in moet kunnen posten wel.

Uiteindelijk ben ik voor deze oplossing gegaan:

Men kan het gastenboek (in dit geval) op deze manier gebruiken:
HTML:
1
2
3
4
5
6
7
8
9
10
<html>
<head>
 <script type="text/javascript" src="http://www.mainserver.com/javascript.php?gid=1"></script>
</head>
<body>

<div id="Guestbook"></div>

</body>
</html>


javascript.php is een php file die op een andere server staat en die op dynamische wijze aan de hand van het gid (gastenboek-id) de voorkeuren en berichten ophaalt en zootje javascript output die het gastenboek in die div laadt.

Het probleem van de referer heb ik ook op kunnen lossen.
Bij de voorkeuren slaat men op waar het gastenboek zich bevindt.
Vervolgens zet ik deze regel bovenaan in de js-file
PHP:
1
2
3
4
5
6
7
if (isset($referer))        // deze is eerder gezet als de voorkeuren succesvol werden geladen
{
    echo "if (location.href != '".$referer."')\n".
        "{\n".
        "\tlocation.href = '".$referer."';\n".
        "}\n";
}
=> wordt:
JavaScript:
1
2
3
4
if (location.href != 'http://www.clientserver.com/gastenboek.html')
{
    location.href = 'http://www.clientserver.com/gastenboek.html';
}
Pagina: 1