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


How to compare a variable to first part of HTTP_REFERER?

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

有(更好的方法吗?):

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

基本上,我想有一个if/else的情况,当uri匹配时和不匹配时。我还想知道,如果你愿意的话,它如何使黑客攻击安全,这样当$referrerhttp://badsite.com/file.php?param1=http://foo.com一样是假的时,它就不会被欺骗,这样http://foo.com部分就不会被认为是合法的匹配。

谢谢大家!

仅检查域:

$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
}

确切地说:

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

"如果从引用起始的子字符串与搜索项长度相同,则等于搜索项…"

在某些情况下,引用可能不会以您期望的小写形式发送。考虑到这种情况,可以考虑尝试:

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

这将在引用人与搜索词的开头执行不区分大小写的比较。