У меня есть 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 В эти дни SHA1 звучит слишком быстро. Алгоритмы для password_hash
, вероятно, будут намного лучше, поскольку они намеренно медленнее – и вы можете настроить дополнительные раунды тривиально, если хотите.
Пусть page1.php задает переменную сеанса, для которой выполняется проверка page2.php.