请告诉我,如果我得到了一个返回:http://foo.com
-的变量$var
,那么我如何检查这个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
部分就不会被认为是合法的匹配。
谢谢大家!
仅检查域:
$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)
这将在引用人与搜索词的开头执行不区分大小写的比较。