去除X-Powered-By标头

168
  1. 我如何在 PHP 中删除 X-Powered-By 头信息?我的服务器是 Apache,并且我使用的是 PHP 5.21 版本。由于它不支持 5.21 版本,所以我无法使用 PHP 的 header_remove 函数。我尝试了 Header unset X-Powered-By,在本地机器上可以运行,但在生产服务器上无法运行。

  2. 如果 PHP 版本低于 5.3 不支持 header_remove(),有没有替代方法?


生产环境中的PHP版本:PHP/5.2.13 本地环境中的PHP版本:PHP/5.2.11 生产环境中的Apache版本:Apache/2.2.15 (Unix) 本地环境中的Apache版本:Apache 2.0.63(在Mac上使用MAMP) - Castor
9个回答

285

我认为这是由PHP.ini中的expose_php设置控制的:

expose_php = off

该选项决定PHP是否可以展示其已安装在服务器上(例如通过添加其签名到Web服务器标头)。它不会对安全造成任何威胁,但它使得能够确定您的服务器上是否使用了PHP。

正如David C所指出的那样,直接暴露过时(有可能存在漏洞)的PHP版本可能会引诱攻击者试图攻击它,这是一个潜在的安全风险。


41
“在任何方面都不构成安全威胁。”对于运行在托管服务器上的旧版本php可能是不真实的。我听说黑客可以利用过去版本中已经被充分记录的“漏洞”。最好还是隐藏这个事实.... - David
18
在我看来,“完全更新”是个错误的概念。最好直接禁用信息。有可能昨天发布的版本已经存在安全威胁,而且根据您的升级周期有多积极,可能会持续一段时间。最好直接让他们猜测。我尽可能隐藏所有信息,包括nginx版本。 - Mike Purcell
3
他的意思是,这不会给你已经面临的安全威胁增加负担。 - Pacerier
7
你可以有意地报告一个错误的X-Powered-By标头值,而且应该这样做。例如,如果你正在运行PHP,你可以发送一个X-Powered-By: ASP.NET标头,作为一种方式来减缓攻击者识别你的Web服务器上的软件配置。让攻击者追寻错误的方向,以减缓他们的扫描。 - Chaoix
3
当然会增加安全威胁。黑客会扫描成千上万个网站,寻找易攻击的目标......如果旧版服务器有这样的头信息,那么它现在将成为攻击目标,而之前则会被忽略。这直接增加了安全威胁。即使保持最新状态,在未应用更新的短暂时间内,也可能会增加威胁。 - user2493235
显示剩余3条评论

89

4
这个解决方案适用于 PHP,expose_php = off 在 .htaccess 和 PHP 文件中均不起作用。 - jcubic

59

3
这在我的生产服务器上不起作用,但在我的本地机器上可以。你有任何想法为什么会发生这种情况吗? - Castor
1
@Castor:mod_headers在两个服务器上都可用吗?您被允许覆盖FileInfo吗(请参阅http://httpd.apache.org/docs/2.2/mod/core.html#allowoverride)? - Gumbo
@Castor:嗯,那我不明白为什么这个方法不起作用。 - Gumbo
@Gumbo,我们怎么处理日期和服务器头信息?似乎无法使用unset命令。 - Pacerier
即使您无法访问Apache配置(如果您无法更改php.ini,则可能无法更改Apache配置文件),也可以在.htaccess文件中设置此项。但是,我认为在Web应用程序中使用PHP的header_remove仍然更容易。 - MV.
显示剩余5条评论

27
if (function_exists('header_remove')) {
    header_remove('X-Powered-By'); // PHP 5.3+
} else {
    @ini_set('expose_php', 'off');
}

17
如果您可以访问 php.ini 文件,那么请将 expose_php = Off 设置为关闭。

3
好的,我已经从php代码中让它工作了。 header("X-Powered-By: "); 将X-Powered-By头设置为空即可删除它。感谢大家的时间和建议。 - Castor

8

在发送头部之前,尝试添加一个header()调用,例如:

header('X-Powered-By: Our company\'s development team');

无论在 php.ini 中 expose_php 设置为何值。

5
如果你使用FastCGI,请尝试以下方法:
fastcgi_hide_header X-Powered-By;

1
如果您使用的是共享主机、VPS或云服务器,并且想要隐藏X-Powered-By: PHP/7.x.x,那么请在.htaccess文件中添加以下代码。
Header always unset X-Powered-By
Header unset X-Powered-By

适用于:WordPress,CodeIgniter,Laravel,Php。

-3
这个解决方案对我有用 :)
请将以下行添加到脚本中并检查。
可能不需要进行Ngnix / Apache等级设置。
header("Server:");

1
由于Server头是由Apache或nGinx添加的,因此无法从PHP更改它。此外,OP要求删除X-Powered-By - Binar Web

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接