Подтвердить что ты не робот

Осмотреть реферер в PHP

Можно ли проверить, кто вводит ваш сайт в PHP. У меня есть веб-приложение (написанное на PHP), которое должно разрешать пользователям вводить только некоторые веб-сайты. Можно ли получить сайты рефералов, просмотрев объект _Request? Если да, то как?

4b9b3361

Ответ 1

Да, но имейте в виду, что некоторые прокси и другие вещи отделяют эту информацию, и ее можно легко подделать. Поэтому никогда не полагайтесь на это. Например, не думайте, что ваше веб-приложение безопасно от CSRF, потому что вы проверяете, что реферер соответствует вашему собственному серверу.

$referringSite = $_SERVER['HTTP_REFERER']; // is that spelt wrong in PHP ?

Если вы хотите разрешать только запросы из определенного домена, вам нужно будет проанализировать некоторые URL-адреса, чтобы получить домен верхнего уровня. Как я узнал больше, это можно сделать с помощью PHP parse_url().

Как andyk указывает в комментариях, вам также придется разрешить доступ к www.example.com и example.com.

Ответ 2

Пока вы можете посмотреть $_SERVER['HTTP_REFERER'], чтобы получить ссылочный сайт, не делайте ставку на ферму. Браузер устанавливает этот заголовок, и он легко подделывается.

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

BTW, вы также можете блокировать рефереры на уровне apache с помощью mod_rewrite.

Ответ 3

Вы не можете доверять рефереру. Несмотря на то, что он пришел из массива $_SERVER, на самом деле это значение для пользователя/браузера, и оно легко подделано, используя такие вещи, как Firefox RefControl addon.

Ответ 4

Вам нужно изучить массив $_SERVER для ключа HTTP_REFERER.