2009-07-20 12 views
6

Mam widżet Javascript, który ludzie mogą umieścić na swojej stronie.PHP - Źródło (nazwa hosta) żądania GET

Chcę użyć prostego żądania pobierania w domenie krzyżowej, aby pobrać skrót.

Jednak potrzebuję mojego skryptu PHP, aby zezwalać tylko na to żądanie domeny krzyżowej z szeregu domen przechowywanych w tablicy.

Co mogę zrobić w moim skrypcie PHP (nie w .htaccess lub iptables), aby znaleźć źródło (nazwę hosta) żądania pobierania?

+0

$ _SERVER ['REMOTE_HOST'] nie działa, ponieważ zwraca dane klienta (internauty), a nie szczegóły strony internetowej, która zgłasza żądanie GET - właśnie tego potrzebuję. –

Odpowiedz

2

Można użyć zmiennej $_SERVER. W szczególności $ _SERVER [ „REMOTE_HOST”] ale patrz poniżej zastrzeżeniem:

Jednak serwer WWW musi być skonfigurowany do stworzenia tej zmiennej. Na przykład w Apache będziesz potrzebować Nazwa hostaLookups Wewnątrz httpd.conf , aby istniał. Zobacz także gethostbyaddr().

+0

$ _SERVER ['REMOTE_HOST'] zawiera adres (wyszukiwanego dns) użytkownika _client_, który wysłał żądanie. Nie jestem pewien, czy to jest odpowiedź ... – VolkerK

+0

Dziękuję za odpowiedzi, ale problem jest taki, jak mówi Volker, który zwraca adres klienta, nie hosta lub adres IP witryny, która zgłasza żądanie. –

1

Jeśli żądania przychodzą z JavaScript, można sprawdzić nagłówek odsyłacza HTTP ($ _SERVER ['HTTP_REFERER']). Jest to jednak opcjonalne - niektóre proxy lub programy zabezpieczające usuwają nagłówek strony wywołującej z żądań HTTP.

+0

A także nie jest niezawodny, ponieważ dowolny klient może wysłać dowolnego arbitra lub nie ma go wcale, patrz np. https://addons.mozilla.org/en-US/firefox/addon/953. – VolkerK

4

Biorąc pod uwagę klienta (przeglądarki autora) może wysyłać Ci co chce, chciałbym powiedzieć, że nie ma sposobu, aby mieć pewność, której strona internetowa skrypt jest wywoływany z:

  • Jak chcesz wiedzieć, adres URL strona osadzania widżet, a nie adres użytkownika, $_SERVER['REMOTE_HOST'] nie pomoże
  • $_SERVER['HTTP_REFERER'] może wydawać się w porządku, ale w rzeczywistości nie jest:
    • klient nie musi wysłać go (i nie robi” t zawsze rób)
    • Jak to jest wysyłane przez klienta, może być sfałszowane/sfałszowane Dość łatwo

Tak, powiedziałbym, nie ma prawdziwego rozwiązania tego problemu, przynajmniej na stronie Twojego serwera (Jeśli się mylę, jestem zainteresowany, aby wiedzieć)

Ale może można coś zrobić po stronie klienta: pisząc to wszystko, pomyślałem o mapach google, a to system klucz API:

  • Masz (unikalny) klucz API 4 twoja domena
  • Po załadowaniu skryptów JS z google, twój klucz wysyła
  • , jeśli klucz nie jest zarejestrowany dla domeny, w której próbujesz wyświetlić mapę, istnieje komunikat alert, który brzmi "Serwer interfejsu API serwisu Mapy Google odrzucił Twoją prośbę. Może to być spowodowane tym, że klucz API użyty w tej witrynie został zarejestrowany dla innej witryny internetowej. "
    • ale mapa wydaje się być wyświetlane w każdym razie - przynajmniej na moim serwerze testowym
  • ten alert jest naprawdę denerwujące dla użytkownika końcowego, i nie sądzę, by ktokolwiek chcą alert wyświetlany na swojej stronie, ponieważ są one za pomocą autoryzacji withot service ...

może trzeba spojrzeć na to w jaki sposób odbywa się na google maps :-)