Php реферер работает или нет? - PullRequest
2 голосов
/ 09 июня 2010

Мне нужно знать ссылающийся сервер для страницы на моем сайте.

Есть ли какой-нибудь безопасный способ проверить, откуда пользователь "зашел" на страницу ОТ?

Я попытался загрузить это на свой сервер, но это вообще ничего не выводило, когда я записывал адрес в файл на панели адреса браузера:

    <?php echo $_SERVER['HTTP_REFERER']; ?>

Мне нужно проверить это, чтобы отображать ссылку на странице или нет ...

Спасибо

Ответы [ 4 ]

5 голосов
/ 09 июня 2010

Есть ли какой-нибудь безопасный способ проверить, откуда пользователь "зашел" на страницу ОТ?

Не совсем. Как и все HTTP-заголовки, это легко изменить. Кроме того, браузер также может не отправлять реферала.

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

Я пытался загрузить это на свой сервер, но это вообще ничего не выводило, когда я записывал адрес в файл в адресной строке браузера

В этом случае браузер не будет отправлять реферала, потому что вы никуда не пришли.

3 голосов
/ 09 июня 2010

Попробуйте использовать $_SERVER['HTTP_REFERER'].Обратите внимание, что это HTTP_REFERER, а НЕ, как и следовало ожидать, HTTP_REFERRER

Также обратите внимание на документацию для этой переменной:

адрес страницы (если есть), которая направила пользовательский агент на текущую страницу.Это устанавливается пользовательским агентом.Не все пользовательские агенты будут устанавливать это, а некоторые предоставляют возможность изменять HTTP_REFERER как функцию.Короче говоря, этому нельзя доверять.

Кроме того, ceejayoz правильно заметил, что если вы переходите непосредственно на страницу и не переходите по ссылке, большинство браузеров не будут устанавливать реферер.

3 голосов
/ 09 июня 2010

Две вещи:

Это должно быть $_SERVER['HTTP_REFERER'] (обратите внимание, первый сингл R). Случай с увековеченной опечаткой, но вот как это выглядит. :)

Во-вторых, http-referer отправляется только в том случае, если вы переходите на страницу, нажав на ссылку. Ввод ссылки в адресной строке обходит ее.

Но чтобы ответить на ваш фактический вопрос, есть несколько человек, у которых установлен браузер, поэтому ни одного реферера никогда не отправляется, а это означает, что, к сожалению, нет надежного способа определить даже ссылки. (Не говоря уже о том, что данные могут быть подделаны, поскольку они отправляются клиентом.)

1 голос
/ 09 июня 2010

Я пытался загрузить это на свой сервер, но это вообще ничего не выводило, когда я записывал адрес в файл в адресной строке браузера:

Это потому, что в этой ситуации нет реферера - вы ввели его в адресную строку браузера.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...