Как проверить, отправляется ли запрос от одного сервера?
Скажем, у меня есть домен на www.domain.com. Теперь у меня есть файлы обработки php, которые будут обрабатывать формы, размещенные в этом домене. Эти процессы будут выполняться только в том случае, если запросы отправляются из домена, т.е. www.domain.com и любые другие запросы, отправленные из других доменов, будут отброшены.
В принципе: вы не можете.
С протоколом HTTP каждый запрос независим от других.
Первой идеей будет проверка HTTP-заголовка Referer, но обратите внимание, что:
Итак: не надежное решение.
Возможно, и намного лучше, чем идея Referer, решением может быть использование nonce :
Если эти два значения не совпадают, откажитесь от использования представленных данных.
Примечание. Эта идея часто используется, чтобы помочь бороться с CSRF – и интегрирована в компонент «Form» некоторых Framework (например, Zend Framework ) .
это проверит, есть ли референт, тогда он будет сравнивать его с текущим доменом, если он отличается от внешнего референта
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 } }
Я знаю, что это старый поток, но кто-то, возможно, найдет его актуальным.
Ответ: Да, вы можете . Но это зависит от того, установлен ли ваш сервер 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); }