小编典典

PHP $_SERVER['HTTP_HOST'] vs. $_SERVER['SERVER_NAME'],我对手册页的理解正确吗?

all

我做了很多搜索,还阅读了 PHP $_SERVER
文档
。我是否有权在我的 PHP
脚本中使用整个站点中使用的简单链接定义?

$_SERVER['SERVER_NAME']基于您的 Web 服务器的配置文件(在我的例子中是
Apache2),并且取决于几个指令:(1)VirtualHost,(2)ServerName,(3)UseCanonicalName 等。

$_SERVER['HTTP_HOST']是根据客户的要求。

因此,在我看来,为了使我的脚本尽可能兼容而使用的正确方法是$_SERVER['HTTP_HOST']. 这个假设正确吗?

后续评论:

$_SERVER我想在阅读这篇文章并注意到有些人说“他们不会信任任何vars”后,我有点偏执:

显然,讨论主要是关于$_SERVER['PHP_SELF']为什么你不应该在没有适当转义以防止 XSS 攻击的情况下在表单操作属性中使用它。

我对上述原始问题的结论是,使用$_SERVER['HTTP_HOST']网站上的所有链接是“安全的”,而不必担心 XSS
攻击,即使在表单中使用也是如此。

如果我错了,请纠正我。


阅读 123

收藏
2022-07-28

共1个答案

小编典典

这可能是每个人首先想到的。但这有点困难。请参阅Chris Shiflett 的文章 SERVER_NAME
VersusHTTP_HOST

似乎没有银弹。只有当您强制 Apache
使用规范名称
时,您才能始终使用SERVER_NAME.

因此,您要么使用它,要么根据白名单检查主机名:

$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;
}
2022-07-28