Intereting Posts
PHPunit – ошибки Поиск определенного индекса с помощью Sphinx, из нескольких индексов, через PHP-скрипт Невозможно установить mbstring php conflict Как я могу использовать WebEx URL / XML API для регистрации пользователя для события? Как выбрать бинарное поле? (PHP, MySQL) Метод (например, через скрипт bash), чтобы превратить индексы php-массива в настоящее время с использованием констант в индексы массивов с использованием одинарных кавычек? Динамически вызывать класс с переменным числом параметров в конструкторе Расширенный поиск Magento не возвращает результатов как написать PHP-модуль в C Извлечение значений узла с помощью XPath Применить одно правило проверки для нескольких полей Угловые скобки в строке PHP Почему в html2pdf не работает граница? Загрузка больших файлов на S3 с поддержкой резюме Идентификатор пользователя Drupal Session для независимого скрипта

Как проверить, есть ли запрос, поступающий с того же сервера или другого сервера?

Как проверить, отправляется ли запрос от одного сервера?

Скажем, у меня есть домен на 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); }