2014-09-28 2 views
0

Скажите, пожалуйста, если у меня есть переменная $var, которая возвращает: http://foo.com - тогда как я могу проверить, идентичен ли этот uri тому, что возвращает $referrer (учитывая его), или к его первой части, если $referrer = http://foo.com/oof/ или дольше ..?Как сравнить переменную с первой частью HTTP_REFERER?

С (любой лучше?):

$referrer = isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : ''; 

В основном я хотел бы иметь, если/другое дело, когда Ури матчи и когда он не делает. Мне также интересно, как это сделать взломать сейф, если вы это сделаете, чтобы его нельзя было обмануть, когда $referrer подделка такая: http://badsite.com/file.php?param1=http://foo.com, и поэтому здесь часть http://foo.com не будет считаться законным совпадением.

Спасибо!

ответ

1

Чтобы проверить только домен:

$yoursite = ""; //Your site url without http:// or www. 
$yoursite2 = ""; //Type your domain with www. this time 

$referer = $_SERVER['HTTP_REFERER']; 
$domain = parse_url($referer); 

if($domain['host'] == $yoursite || $domain['host'] == $yoursite2) { 
    //Run your code here normally 
} 
+0

Спасибо! Скажите, пожалуйста, что-то означает, что часть '' host'' означает, что только исходный экземпляр 'http: // .... com' в' $ domain' будет проверен для соответствия, следовательно, он не будет подвержен обману как я упоминал в первоначальном вопросе? – Alex

+0

Вы не можете быть на 100% уверены в реферере, потому что кто-то может прервать HTTP-запрос и изменить реферера, и вы не знаете. – Abkarino

+0

Возможно, вам стоит начать сеанс и сохранить в нем реферер.Это единственные переменные, которые пользователь не может достичь или знать контент. – Abkarino

1

В буквальном смысле:

if(substr($referrer, 0, strlen($var)) == $var) 

«Если подстрока с начала реферера той же длины, как условие поиска, равно поисковому запросу ...»

В некоторых случаях , источники не могут быть отправлены в нижнем регистре, который вы могли бы ожидать. Чтобы разрешить для этого случая, пытаясь рассмотреть:

if(strcasecmp(substr($referrer, 0, strlen($var)), $var) == 0) 

Это выполняет сравнение без учета регистра на старте ссылающихся против термина поиска.

+0

Спасибо! Но, пожалуйста, скажите мне - это проверяет только длину, а не содержимое самой строки? Во всяком случае, я бы хотел, чтобы он соответствовал содержимому '$ var' правильной части' $ referrer', даже если последний длиннее, хотя в отношении фиктивной фильтрации uri ... – Alex

+0

Пожалуйста, прочитайте и поймите код. Вот как вы учитесь. –

+0

Я прочитал его, я думаю, что я попросил разумные пояснения, поскольку вы только упоминаете длину строки. Пожалуйста, любезно дайте мне ответ в этом отношении, или, короче говоря, просто скажите мне, действительно ли код, который вы мне дали, отвечает на все проблемы, упомянутые в моем вопросе. Я бы очень признателен. Спасибо. – Alex

Смежные вопросы