如何将变量与HTTP_REFERER的第一部分进行比较?

时间:2014-09-28 09:17:17

标签: php http url if-statement uri

请告诉我,如果我得到一个变量$var,它返回:http://foo.com - 那我怎么能检查这个uri是否与$referrer返回的相同(假设有一个) ,如果$referrer = http://foo.com/oof/或更长时间,或者它的第一部分......?

有(更好的方法吗?):

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

基本上我想要一个if / else案例,因为当uri匹配时以及它没有匹配时。 如果你愿意,我也想知道如何使它成为黑客安全的,这样当$referrer假的时候就不会被欺骗:http://badsite.com/file.php?param1=http://foo.com,所以这里http://foo.com部分不会被视为合法匹配。

非常感谢!

2 个答案:

答案 0 :(得分:1)

非常字面意思:

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

"如果引荐来源开头的子字符串与搜索字词的长度相同,则等于搜索字词..."

在某些情况下,推荐人可能不会以您可能期望的小写字母发送。为了考虑这种情况,请考虑尝试:

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

这会对引荐来源与搜索字词的开头进行不区分大小写的比较。

答案 1 :(得分: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
}