2009-07-20 5 views
6

Ich habe ein Javascript-Widget, das Menschen auf ihrer Website einbetten können.PHP - Quelle (Hostname) einer GET-Anfrage

Ich möchte eine einfache Cross-Domain-Anfrage zu einem Hash zu ziehen.

Allerdings brauche ich mein PHP-Skript, um diese domainübergreifende Anfrage nur aus einer Reihe von Domänen zuzulassen, die ich in einem Array gespeichert habe.

Was kann ich in meinem PHP-Skript (nicht in .htaccess oder iptables) tun, um die Quelle (Hostname) der Get-Anfrage herauszufinden?

+0

$ _SERVER ['REMOTE_HOST'] funktioniert nicht, da es die Details des Clients (Web-Benutzer) zurückgibt und nicht die Details der Webseite, die die GET-Anfrage machen - was ich brauche. –

Antwort

2

Sie könnten die Variable $_SERVER verwenden. Insbesondere die $ _SERVER [ ‚REMOTE_HOST‘], aber unten Vorbehalt sehen:

jedoch Ihren Webserver konfiguriert sein muss, diese Variable zu erstellen. Zum Beispiel in Apache Sie benötigen HostnameLookups auf innerhalb httpd.conf für es zu existieren. Siehe auch gethostbyaddr().

+0

$ _SERVER ['REMOTE_HOST'] enthält die Adresse (DNS-Lookup) des _client_, der die Anfrage gestellt hat. Ich bin mir nicht sicher, dass das die Antwort ist ... – VolkerK

+0

Vielen Dank für Ihre Antworten, aber das Problem ist, was Volker sagt, dass die Client-Adresse nicht der Host oder IP der Website die Anfrage zurückgibt. –

1

Wenn die Anforderungen von JavaScript kommen, können Sie den HTTP-Referrer-Header ($ _SERVER ['HTTP_REFERER']) überprüfen. Es ist jedoch optional - einige Proxies oder Sicherheitsprogramme entfernen den Referrer-Header von HTTP-Anfragen.

+0

Und es ist auch nicht zuverlässig, da jeder Client einen beliebigen Referrer oder keinen senden kann, siehe z.B. https://addons.mozilla.org/en-US/firefox/addon/953. – VolkerK

4

In Anbetracht der Client (Browser des Benutzers) können Sie senden, was sie will, würde ich sagen, es gibt keinen Weg, um sicher zu sein, die Website-Skript aus aufgerufen:

  • Wie Sie die URL wissen wollen die Website Ihres Widgets, und nicht die Adresse des Benutzers Einbetten $_SERVER['REMOTE_HOST'] helfen nicht
  • $_SERVER['HTTP_REFERER'] OK erscheinen könnte, aber tatsächlich nicht ist:
    • die Auftraggeber haben es nicht zu senden (und es doesn‘ t immer tun)
    • Da es durch den Client gesendet wird, kann es

So Ganz leicht gefälscht/gefälscht wird, würde ich sagen, dass es für dieses Problem, zumindest auf dem Server-Seite keine wirkliche Lösung ist (wenn ich falsch bin, ich bin daran interessiert zu wissen)

Aber vielleicht können Sie etwas auf der Client-Seite tun: wenn das alles zu schreiben, dachte ich über google Maps, und es ist System von API Key:

  • Sie haben einen (eindeutigen) API-Schlüssel vier Ihre Domäne
  • Wenn Sie die JS-Skripts von Google laden, senden Sie diesen Schlüssel
  • , wenn der Schlüssel nicht für die Domäne registriert ist, auf der Sie die Karte anzeigen möchten, Es gibt eine alert Nachricht, die besagt: "Der Google Maps-API-Server hat Ihre Anfrage abgelehnt. Dies könnte daran liegen, dass der auf dieser Site verwendete API-Schlüssel für eine andere Website registriert wurde. "
    • aber die Karte scheint ohnehin angezeigt werden - zumindest auf meinem Testserver
  • diese alertist wirklich für den Endanwender anoying, und ich glaube nicht, dass jemand würde eine Warnung auf ihrer Website angezeigt werden sollen, weil sie Ihren Dienst withot Autorisierung verwenden ...

Vielleicht haben Sie einen Blick auf, wie haben kann dies für google gemacht wird abbildet :-)