PHP - источник (имя хоста) GET-запроса - PullRequest
6 голосов
/ 20 июля 2009

У меня есть виджет Javascript, который люди могут вставлять на свой сайт.

Я хочу использовать простой междоменный запрос на получение, чтобы получить хеш.

Однако мне нужен мой PHP-скрипт, чтобы разрешить этот междоменный запрос только из серии доменов, которые я сохранил в массиве.

Что я могу сделать в своем PHP-скрипте (не в .htaccess или iptables), чтобы узнать источник (имя хоста) запроса get?

Ответы [ 3 ]

4 голосов
/ 20 июля 2009

Учитывая, что клиент (браузер пользователя) может отправлять вам все, что он хочет, я бы сказал, что нет никакого способа узнать, с какого веб-сайта вызывается ваш скрипт:

  • Поскольку вы хотите знать URL-адрес веб-сайта, на котором встроен ваш виджет, а не адрес пользователя, $_SERVER['REMOTE_HOST'] не поможет
  • $_SERVER['HTTP_REFERER'] может показаться нормальным, но на самом деле это не так:
    • Клиент не должен отправлять его (и это не всегда)
    • Поскольку он отправляется клиентом, его можно легко подделать / подделать

Итак, я бы сказал, что нет реального решения этой проблемы, по крайней мере, на стороне вашего сервера (Если я ошибаюсь, мне интересно знать!)

Но, может быть, вы можете что-то сделать на стороне клиента: когда я писал все это, я думал о картах Google и системе API Key:

  • у вас есть (уникальный) ключ API четыре вашего домена
  • Когда вы загружаете JS-скрипты из Google, вы отправляете этот ключ
  • если ключ не зарегистрирован для домена, на котором вы пытаетесь отобразить карту, появляется сообщение alert, в котором говорится: * Сервер API Карт Google отклонил ваш запрос. Возможно, это связано с тем, что API ключ, использованный на этом сайте, был зарегистрирован для другого сайта."
    • но карта все равно отображается - по крайней мере, на моем тестовом сервере
  • это alert действительно действительно раздражает для конечного пользователя , и я не думаю, что кто-то хотел бы, чтобы оповещение отображалось на их сайте, потому что они используют ваш сервис без авторизации ...

Может быть, вы можете посмотреть, как это делается для карт Google: -)

2 голосов
/ 20 июля 2009

Вы можете использовать переменную $ _ SERVER . В частности, $ _ SERVER ['REMOTE_HOST' ], но смотрите предостережение ниже:

Однако ваш веб-сервер должен быть настроен на создание этой переменной. Например, в Apache вам понадобится HostnameLookups Внутри httpd.conf чтобы оно существовало. Смотрите также gethostbyaddr () .

1 голос
/ 20 июля 2009

Если запросы поступают из JavaScript, вы можете проверить HTTP-заголовок реферера ($ _SERVER ['HTTP_REFERER']). Однако это не обязательно - некоторые прокси или программы безопасности удаляют заголовок реферера из HTTP-запросов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...