当前位置: 首页 > 面试题库 >

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

白修谨
2023-03-14
问题内容

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

$_SERVER['SERVER_NAME']
基于您的Web服务器的配置文件(在我的情况下为Apache2),并根据一些指令而有所不同:(1)VirtualHost,(2)ServerName,(3)UseCanonicalName等。

$_SERVER['HTTP_HOST'] 基于客户端的请求。

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

后续评论:

显然,这里的讨论主要是关于$_SERVER['PHP_SELF']为什么不适当地转义以防止XSS攻击就不应该在form action属性中使用它的原因。

我对上述原始问题的结论是$_SERVER['HTTP_HOST'],即使在表单中使用XSS攻击,也不必担心XSS攻击是安全的。

如果我错了,请纠正我。


问题答案:

似乎没有灵丹妙药。只有当您强迫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;
}


 类似资料:
  • 问题内容: 我在JavaScript中输入了一个绝对URL,并为window.location进行了硬编码。 我不想每次测试应用程序时都必须更改此设置。在PHP中,我可以通过测试$ _SERVER [“ HTTP_HOST”]变量来找出我所在的服务器,然后进行相应的调整来处理此问题。但是,我不太熟悉Java,想知道它是否具有类似的方法?或者,即使JavaScript也有类似的方法? 代码如下: 我

  • 我的nginx和php配置有问题。由于某些原因,为空。 我正在跑步: Ubuntu 18.04 nginx(nginx版本:nginx/1.14.0(Ubuntu)) php(PHP7.2.10-0ubuntu0.18.04.1) 我不知道是什么导致了这个问题。我在网上读了很多书,但找不到任何解决办法。 只是为了看看是否有更多的信息丢失,我检查了我从,这是我得到的(审查过的私人信息...): 数组

  • 问题内容: 信任安全吗?是否可以通过更改请求标头或类似的内容来代替? 这样写安全吗? 问题答案: 是的,这很安全。它是TCP连接的源IP,不能通过更改HTTP标头代替。 您可能要担心的一种情况是,如果您在反向代理后面,则REMOTE_ADDR将始终是代理服务器的IP,而用户IP将在HTTP标头中提供例如X-Forwarded-For。但是对于正常使用情况,读取REMOTE_ADDR是可以的。

  • 问题内容: 是否所有浏览器都支持PHP的$ _SERVER [‘HTTP_X_REQUESTED_WITH’]? 您是否知道$ _SERVER [‘HTTP_X_REQUESTED_WITH’]不起作用的任何浏览器或时间? 问题答案: X-Requested-With标头的发送实际上取决于所使用的Ajax库。我签出了Prototype,jQuery,Mootools和YUI,它们都进行了设置。

  • 问题内容: 我想在我的网站上使用,但得到以下信息: 我试过打印。输出以下内容: 谁能帮助我找到或建议替代方案? 问题答案: 从文档中: 页面(如果有的话)的地址,该页面将用户代理引至当前页面。这是由用户代理设置的。并非所有的用户代理都将设置此功能,有些用户代理提供了将HTTP_REFERER修改为功能的功能。简而言之,它不能真正被信任。

  • 问题内容: 和PHP 和有什么不一样? 哪里: === === 您何时会考虑使用另一种,为什么呢? 问题答案: 所述从得到的HTTP请求报头,这就是在客户端实际使用作为请求的“目标主机”。将在服务器配置定义。使用哪种取决于您的需要。但是,您现在应该意识到,一个是客户机控制的值,因此对于在业务逻辑中使用可能是不可靠的,而另一个是服务器控制的值,该值更可靠。但是,您需要确保所讨论的Web服务器已正确配