Осмотреть реферера в PHP - PullRequest
       14

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

18 голосов
/ 09 января 2009

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

Ответы [ 4 ]

28 голосов
/ 09 января 2009

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

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

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

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

6 голосов
/ 09 января 2009

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

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

Кстати, вы также можете блокировать рефереры на уровне apache , используя mod_rewrite .

4 голосов
/ 09 января 2009

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

0 голосов
/ 09 января 2009

Вам необходимо проверить массив $ _SERVER для ключа 'HTTP_REFERER'.

...