HTTP_referer для нескольких URL-адресов

Я получил этот «HTTP_referer-скрипт», который проверяет, приходит ли посетитель с определенного URL-адреса (защищенного паролем) при входе на сайт. Моя проблема в том, что это работает только в том случае, если посетитель приходит с абсолютно правильного URL-адреса. То есть:

Если пользователь приходит с: http://mydomain.com, все работает нормально, но если пользователь приходит с http://www.mydomain.com не работает.

Можно ли в любом случае добавить второй URL-адрес в HTTP_referer в этом случае тот же домен, но с «www»?

<?php 
$referrer = $_SERVER['HTTP_REFERER']; 

if ($referrer != 'http://mydomain.com/') { 
    die("You do not have access to this site."); 
} 

// put your page code here 

?>
<h1>Content here</h1> 

Большое спасибо! / а


person GetGalax    schedule 17.06.2014    source источник
comment
Почему бы не добавить второй URL в условный оператор: if($referrer != 'http://mydomain.com/' || $referrer != 'http://www.mydomain.com/')   -  person hutchbat    schedule 17.06.2014
comment
Вы можете попробовать оператор ||: php.net/manual/en /language.operators.logical.php   -  person Boldewyn    schedule 17.06.2014
comment
Как это? if ($referrer != 'theportfolio.se' || $referrer != 'theportfolio.se/') die(Вы не пройдете!);   -  person GetGalax    schedule 17.06.2014
comment
Кажется, не работает, он не скажет ни «Вы не...», ни «Довольно здесь сейчас»… Хм!   -  person GetGalax    schedule 17.06.2014
comment
не используйте точку с запятой (;) перед ||. также оба URL-адреса одинаковы в вашем примере, что не имеет смысла. и имейте в виду, что ваш код не является проверкой безопасности, так как посетитель может подделать своего реферера.   -  person Philipp Murry    schedule 17.06.2014


Ответы (3)


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

Что, как говорится. Что вы, вероятно, захотите сделать, так это просто проверить, является ли домен частью строки $_SERVER['HTTP_REFERER']. Потому что в этом случае https://domain.com тоже не сработает.

Итак, в вашем примере используйте это:

<?php 

if ( strstr($_SERVER['HTTP_REFERER'], 'mydomain.com') ) { 
    die("You do not have access to this site."); 
} 

// put your page code here 

?>
<h1>Content here</h1> 

Этот код просто проверяет, является ли «mydomain.com» частью содержимого $_SERVER['HTTP_REFERER'].

Помните, что это также означает: http://www.somedomain.com?test=mydomain.com as referer также будет соответствовать, но маловероятно, что вы столкнетесь с такой ситуацией (и, вероятно, это не имеет значения..)

person Damien Overeem    schedule 17.06.2014
comment
Привет и спасибо за подробный ответ! К сожалению, это не сработало. Должен ли URL-адрес быть полным, например mydomain.com? Может ли это иметь какое-то отношение к странице паролей, используемой перед этой страницей? - person GetGalax; 17.06.2014
comment
Да! Получил работу! Большое спасибо! Я просто изменил URL-адрес с index.php на auth.php (страница проверяет пароль), и тогда все заработало как шарм... Спасибо! - person GetGalax; 17.06.2014

Используйте in_array в сочетании с массивом URL-адресов:

if (!in_array($referrer, array('http://mydomain.com/', 'http://www.mydomain.com/'))) { 
    die("You do not have access to this site."); 
} 
person hindmost    schedule 17.06.2014

Поместите два оператора if следующим образом.

 <?php 
$referrer = $_SERVER['HTTP_REFERER']; 

if ($referrer != 'http://mydomain.com/') { 
    die("You do not have access to this site."); 
} 
if ($referrer != 'http://www.mydomain.com/') { 
    die("You do not have access to this site."); 
} 


// put your page code here 

?>
<h1>Content here</h1> 
person Arshid KV    schedule 17.06.2014