因此,我需要使用php检查页面的引用,如果是*.example.com或*.anothersite.com,则执行代码,如果不是,则重定向到其他地方。
如何使用通配符检查HTTP_REFERER是否等于这些值?
谢谢!
编辑: url将包含多个域,因此regex需要匹配找到的第一个匹配项。
发布于 2013-07-22 19:55:57
其他答案“检查”是好的,但并不严格限制在你的网站上。例如,值为http://attacker.com/www.example.com/的referer将通过几乎所有的检查。制作这样的站点并只发送跨域请求是非常容易的。
有一个可靠和安全的方法来检查referer是否是真的你的域。当然,referer可以被欺骗,但攻击者网站的受害者会发送正确的referer。
诀窍在于使用^特殊字符。下面是这个神奇的正则表达式:
^https?://(([a-z0-9-]+)\.)*example\.com/^ -确保我们处于开始阶段
https? -协议- http或https
(([a-z0-9-]+)\.)* -匹配子域,也是更高级别的子域
example\.com -匹配主域
/ -确保路径的开头,使域名无法继续
发布于 2011-02-18 02:49:23
应该这样做:
$allowed_host = 'example.com';
$host = parse_url($_SERVER['HTTP_REFERER'], PHP_URL_HOST);
if(substr($host, 0 - strlen($allowed_host)) == $allowed_host) {
// some code
} else {
// redirection
}发布于 2011-02-18 02:22:28
$ref = $_SERVER['HTTP_REFERER'];
if (strpos($ref, 'example.com') !== FALSE) {
redirect to wherever example.com people should go
}
if (strpos($ref, 'example.org') !== FALSE) {
redirect to wherever example.org people should go
}当然,这只有在推荐人“很好”的情况下才能起作用。例如,如果你来自谷歌,你可能会在某处搜索到"example.org“,这种情况下,即使你来自谷歌,strpos也会看到它,并进行重定向。
https://stackoverflow.com/questions/5032889
复制相似问题