我知道在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中使用标题。
答案 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中发送或不发送标头(完整地,作为一个批处理)。默认情况下,您的header
Docs调用会替换具有相同名称的上一个标头(除非您使用第二个参数指定不同的内容)。
注意:如果PHP无法收集标题,则无法替换标题。
由于它之前没有发送,因此使用嗅探程序无法检测到它。
所以是的,标题是由PHP收集的,并在“真正的”输出开始时发送(HTTP响应正文)。
答案 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');