我有一个检查 HTTP Referer 的 PHP 脚本。
if ($_SERVER['HTTP_REFERER'] == 'http://www.example.com/') {...}
但是,这似乎本质上是不安全的……因为如果用户访问 'http://example.com/'
或 'http://www.ExaMple 会发生什么。 com'
(两者都不符合相等性测试)。
问题:什么是更好的相等性测试来确保 HTTP Referer 来自 'example.com'
?
最佳答案
parse_url()结合一些字符串杂耍应该做你想做的。试试这个:
$url = parse_url($_SERVER['HTTP_REFERER']);
//take the last two 'dot segments' of the host
$hostOnly = implode('.',array_slice(explode('.',$url['host']),-2));
if (strtolower($hostOnly) == 'example.com') {
//stuff
}
请注意,parse_url() 可能会在格式错误的 URL 上失败,因此您可能需要添加一些错误检查以确保安全。 HTTP_REFERER 很容易被垃圾填满。
关于PHP:检查 $_SERVER ['HTTP_REFERER' ] 相等性的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2580674/