如何在PHP中不使用$ _SERVER ['SERVER_NAME']来获取真正的主机名?还有其他更可靠的方法吗?
我创建了一个从域的路径获取主机名的函数.
我想避免使用$ _SERVER ['SERVER_NAME']变量,因为它可以通过在HTTP请求中发送修改的标头来伪造.
这是我当前的实现(如果路径中包含实际的域名,则此方法有效.例如:/vhosts/website.com/public_html):
function getServerName() {
$path = realpath(__FILE__);
$url = array();
preg_match_all("/\/[a-z0-9-]+(\.[a-z0-9-]+)+/i", $path, $url);
// 4 is minimum requirement for the address (e.g: http://www.in.tv)
if (strlen($url[0][0]) > 4) {
$result = str_replace("/", "", $url[0][0]);
return $result;
}
else
return false;
}
Run Code Online (Sandbox Code Playgroud)
谢谢!
如果您想要客户端无法设置的服务器名称,请使用$_SERVER['SERVER_NAME'].它由服务器本身设置,但也可以在某些情况下使用bug 伪造,就像Gumbo指出并链接到评论中一样.
我认为你所指的是
$_SERVER['HTTP_HOST'];
Run Code Online (Sandbox Code Playgroud)
给定 HTTP 前缀意味着它来自 HTTP 标头。
您可能想使用:
$_SERVER['SERVER_NAME']
Run Code Online (Sandbox Code Playgroud)
这是由服务器定义的并且不能通过请求更改?