Как проверить, есть ли запрос, поступающий с того же сервера или другого сервера?
Как проверить, отправляется ли запрос от одного сервера?
Скажем, у меня есть домен на www.domain.com. Теперь у меня есть файлы обработки php, которые будут обрабатывать формы, размещенные в этом домене. Эти процессы будут выполняться только в том случае, если запросы отправляются из домена, т.е. www.domain.com и любые другие запросы, отправленные из других доменов, будут отброшены.
Ответы
Ответ 1
В принципе: вы не можете.
С протоколом HTTP каждый запрос не зависит от других.
Первой идеей будет проверка HTTP-заголовка Referer, но обратите внимание, что:
- Это может быть фальшивка (она отправляется браузером)
- Это не всегда присутствует.
Итак: не надежное решение.
Возможно, и намного лучше, чем идея Referer, решением может быть использование nonce:
- При отображении формы поместите в нее скрытое поле ввода, содержащее случайное значение
- В то же время сохраните это случайное значение в сеансе, который соответствует пользователю.
- Когда форма отправлена, проверьте, что скрытое поле имеет то же значение, что и в сеансе.
Если эти два значения не совпадают, откажитесь от использования представленных данных.
Примечание: эта идея часто используется для борьбы с CSRF - и интегрирована в "форму", компонент некоторых рамок (Zend Framework, например).
Ответ 2
это проверит, есть ли референт, тогда он будет сравнивать его с текущим доменом, если он отличается от внешнего референта
if ((isset($_SERVER['HTTP_REFERER']) && !empty($_SERVER['HTTP_REFERER']))) {
if (strtolower(parse_url($_SERVER['HTTP_REFERER'], PHP_URL_HOST)) != strtolower($_SERVER['HTTP_HOST'])) {
// referer not from the same domain
}
}
Ответ 3
Я знаю, что это старый поток, но кто-то, возможно, найдет его актуальным.
Ответ: Да, вы можете. Но это зависит от того, установлен ли ваш сервер Apache/nginx для заполнения переменной $_SERVER необходимой информацией. Большинство серверов, возможно, вы можете использовать этот подход.
Что вам нужно сделать, так это извлечь HTTP_REFERER из переменной $_SERVER и сравнить с вашим доменом.
<?php
function requestedByTheSameDomain() {
$myDomain = $_SERVER['SCRIPT_URI'];
$requestsSource = $_SERVER['HTTP_REFERER'];
return parse_url($myDomain, PHP_URL_HOST) === parse_url($requestsSource, PHP_URL_HOST);
}