PHP 中的 $_SERVER['HTTP_HOST'] 与 $_SERVER['SERVER_NAME']
使用 PHP 脚本时,这一点至关重要了解 $_SERVER['HTTP_HOST'] 和$_SERVER['SERVER_NAME'].
了解 $_SERVER 变量
$_SERVER['SERVER_NAME'] 由 Web 服务器的配置决定,并受到 VirtualHost 等指令的影响、服务器名称和 UseCanonicalName。相反,$_SERVER['HTTP_HOST'] 是从客户端的请求派生的。
使用哪个变量?
为了最大化脚本兼容性,选择似乎是合乎逻辑的对于 $_SERVER['HTTP_HOST']。然而,情况稍微复杂一些。 Chris Shiflett 的文章“SERVER_NAME 与 HTTP_HOST”强调不存在明确的解决方案。
潜在的安全问题
虽然 $_SERVER['HTTP_HOST'] 使用起来似乎无害在链接和表单中,重要的是要记住 $_SERVER 变量可以被攻击者操纵。为了减轻这种风险,明智的做法是将允许的主机名列入白名单,如以下代码所示:
$allowed_hosts = array('foo.example.com', 'bar.example.com'); if (!isset($_SERVER['HTTP_HOST']) || !in_array($_SERVER['HTTP_HOST'], $allowed_hosts)) { header($_SERVER['SERVER_PROTOCOL'].' 400 Bad Request'); exit; }
通过遵守这些准则,开发人员可以放心地在 PHP 脚本中使用 $_SERVER 变量,同时保持安全环境。
以上是在 PHP 中什么时候应该使用 $_SERVER['HTTP_HOST'] 与 $_SERVER['SERVER_NAME'] ?的详细内容。更多信息请关注PHP中文网其他相关文章!