隐藏PHP的X-Powered-By标头

时间:2010-02-23 14:26:14

标签: php header http-headers

我知道在PHP中,它会发送X-Powered-By标头以获得PHP版本。

我也知道通过添加一些校验和,您可以访问PHP的学分和一些随机图像(more info here)。

我也知道在php.ini中你可以转expose_php = off

但这是我在一些网站上所做的事情,那就是使用

header('X-Powered-By: Alex');

当我查看标题时,我可以看到它现在是'Alex'而不是PHP版本。我的问题是,这会先发送先前的PHP标头(在它到达我的header()之前,是否可由任何嗅探器程序检测到?或者是由PHP收集的标头,之前发送回浏览器?

顺便说一句,这不是为了安全,只是好奇如何在PHP中使用标题。

7 个答案:

答案 0 :(得分:32)

如果您不希望它发送X-Powered-By标头,您可以在php.ini中设置expose_php = Off

PHP首先编译所有内容(包括哪些标题具有哪些值),然后启动输出,反之亦然。

PHP也可以用自己的复活节彩蛋检测到,你可以在这里阅读这个主题:PHP Easter Eggs

答案 1 :(得分:27)

请参阅Apache Tips & Tricks: Hide PHP version (X-Powered-By)

  

Ups ...我们可以看到PHP增加了它自己的   横幅:

X-Powered-By: PHP/5.1.2-1+b1…
     

让我们看看我们如何禁用它。在   以防止PHP暴露   事实上它安装在   服务器,通过添加其签名   我们需要找到的Web服务器头    php.ini 变量expose_php并将其变为off

     

默认情况下,expose_php设置为开启。

     

在你的php.ini中(基于你的Linux   分布可以在这里找到   各种各样的地方,比如/etc/php.ini,   /etc/php5/apache2/php.ini等)   找到包含expose_php On的行并将其设置为Off:

expose_php = Off
     

进行此更改后,PHP将不会   更长时间将其签名添加到网络上   服务器头。这样做,会   使您的服务器更安全...它只会阻止远程主机   很容易看到你安装了PHP   在系统上,你是什么版本   运行

答案 2 :(得分:16)

在PHP中,在PHP遇到第一个输出语句之前不会发送标题。

这包括第一个<?php之前的任何内容。

这也是setcookie发送警告的原因,如果您在输出某些内容后尝试使用它:

  

警告:无法修改标头   信息 - 已经发送的标题   (输出始于   /path/to/php/file.php:100)in   第150行的/path/to/php/file.php

请注意,如果正在使用output buffering,则不会应用此选项,因为在运行相应的输出缓冲命令之前不会发送输出。

答案 3 :(得分:3)

在发送回浏览器之前,PHP会“收集”标题,以便您可以覆盖状态标题之类的内容。测试它的方法是转到命令提示符,然后键入:

telnet www.yoursite.com 80
GET /index.php HTTP/1.1
[ENTER]
[ENTER]

您将看到响应中发送的标头(将/index.php替换为域后面的PHP页面的URL。)

答案 4 :(得分:2)

要在不访问php.ini的情况下摆脱X-Powered-By标头,只需添加一个空标题。

<?php header('X-Powered-By:'); ?>

这会使用空值覆盖默认的X-Powered-By标头,尽管大多数客户端和应用程序都像这个标题一样没有被发送。

如前所述,必须在发送任何输出之前将其插入代码中。

并回答您的问题:

只会发送您的X-Powered-By标头,因为它会被具有相同名称的标头替换。因此,“嗅探器”无法检测到它。

答案 5 :(得分:1)

  

我的问题是,这会先发送先前的PHP标头(在它到达我的header()之前,是否可被任何嗅探程序检测到?或者是由PHP收集的标题,然后再发送回浏览器?

不,它不会先发送以前的PHP标头。在PHP中发送或不发送标头(完整地,作为一个批处理)。默认情况下,您的headerDocs调用会替换具有相同名称的上一个标头(除非您使用第二个参数指定不同的内容)。

  

注意:如果PHP无法收集标题,则无法替换标题。

由于它之前没有发送,因此使用嗅探程序无法检测到它。

所以是的,标题是由PHP收集的,并在“真正的”输出开始时发送(HTTP响应正文)。

另见headers_sentDocs

答案 6 :(得分:0)

您不需要隐藏 X-Powerd-By 标头,我有一种方法可以将 X-Powered-By: PHP/7.xx 更改为X-Powered-By:any_name

要做到这一点,请转到您的托管服务提供商仪表板中的文件管理器 > public_html > wp-includes > http.php< /strong>

然后在 http.php 中的

header('X-Powered-By: any_name');
  • 其中 any_name 替换为任何名称。使用LiteSpeed Cache插件清除缓存并重新加载浏览器并享受!