как проверить запрашивающий сервер в php?

У меня есть php-страница «server1.com/page1.php» (не реально), а другая страница «server2.com/page2.php»

page1.php в соответствии с параметром, переданным по URL-адресу, который может поступать с любого сервера.

но как я могу проверить, вызывается ли «server1.com/page1.php» с «server2.com/page2.php» или нет.

заранее спасибо

Это можно реализовать многими способами.

Самый простой способ – проверить $ _SERVER ['HTTP_REFERER'], чтобы убедиться, что он соответствует, хотя это не на 100% надежнее и не является надежной защитой.

Второй способ – использовать функциональность сеанса PHP. Это потребует, чтобы два сервера использовали общую область отслеживания сеансов, что является гораздо более сложной настройкой сервера.

Третий метод заключается в использовании общего сервера MySQL, на который оба могут получить доступ для проверки запросов. Это приведет к задержке, которая может немного замедлить запрос.

Четвертым методом было бы использовать обратный вызов на исходный сервер, чтобы убедиться, что он выполнил запрос. Server2 делает запрос на Server1, а Server1 связывается с Server2 и спрашивает, пришел ли от него только что полученный запрос.

Пятый метод заключается в подписи вашего запроса с использованием пары private / public key. Таким образом, вы можете точно убедиться, что запрос пришел именно с сервера, на который он утверждает.

Я делал это раньше, используя хеширование, известный секрет и временную метку. Временная метка необходима для того, чтобы потенциальный подслушиватель не мог воспроизвести этот процесс в любое время, когда они выбирают.

  • Сервер 1 получает время, округляет его до ближайшей минуты
  • Объедините его с известным секретом, хранящимся в файле (длинная случайная строка, скажем, 40 символов)
  • Возьмите SHA1 конкатенированной строки (или любую другую систему хэширования, которую вы предпочитаете 1 )
  • Отправить на сервер 2
  • Сервер 2 выполняет тот же процесс с округленным временем ниже и выше текущего времени, что допускает некоторую неточность в серверных часах.

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

1 В эти дни SHA1 звучит слишком быстро. Алгоритмы для password_hash , вероятно, будут намного лучше, поскольку они намеренно медленнее – и вы можете настроить дополнительные раунды тривиально, если хотите.

Пусть page1.php задает переменную сеанса, для которой выполняется проверка page2.php.