移除X-Powered-By


137
  1. 如何在PHP中删除X-Powered-By标头?我在Apache服务器上,并且使用php 5.21。我无法在php中使用header_remove函数,因为5.21不支持该函数。我使用了Header unset X-Powered-By,它可以在我的本地计算机上工作,但不能在我的生产服务器上工作。

  2. 如果php不支持ver <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

Answers:


236

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

expose_php = off

决定PHP是否可以公开其已安装在服务器上的事实(例如,通过将其签名添加到Web服务器头中)。无论如何,这都不是安全威胁,但是可以确定是否在服务器上使用PHP。

没有直接的安全风险,但是正如David C所指出的那样,公开过时的(并且可能是易受攻击的)PHP版本可能会吸引人们尝试对其进行攻击。


30
“这绝不是安全威胁”。对于在托管服务器上运行的旧版php,这可能是不正确的。我听说黑客可以利用过去版本中有据可查的“漏洞”。最好掩盖这个事实。……
David

14
保持“最新”是错误的积极态度。最好完全禁用该信息。昨天发布的版本可能已经暴露了威胁,并且根据升级周期的积极程度,可能会持续一段时间。最好让他们完全猜测。我还尽可能地隐藏了nginx版本。
Mike Purcell 2014年

1
@David,他的意思是这不会增加您已经面临的安全威胁。
Pacerier 2014年

7
您可以并且应该有目的地报告X-Powered-By标头的错误值。例如,如果您正在运行PHP,则可以发送X-Powered-By:ASP.NET标头,以减慢攻击者对Web服务器上的软件配置进行ID识别的速度。将您的攻击者送往追赶野鹅,以减慢其扫描速度。
Chaoix 2015年

3
@Pacerier当然会增加安全威胁。黑客扫描了1000多个网站,寻找容易的猎物...在旧版本中使用此标头意味着服务器现在已成为目标,而以前可能会被忽略。它直接增加了安全威胁。即使保持最新状态,它也可能在短暂的时间内增加尚未应用的更新的威胁。
Nigel B. Peck


50

如果您不能禁用Exposure_php指令以使PHP的健谈性静音(需要访问php.ini),则可以使用Apache的Header指令删除标头字段:

Header unset X-Powered-By

3
那在我的生产服务器上不起作用。虽然它在我的本地计算机上工作。有什么想法为什么会这样?
Castor

@Castor您在本地和生产计算机上使用什么服务器版本?PHP设置是否有差异?
Pekka

生产版本的PHP版本:PHP / 5.2.13生产版本的PHP版本:PHP / 5.2.11生产版本的Apache版本:Apache / 2.2.15(Unix)本地生产的Apache版本:Apache 2.0.63(在Mac上使用MAMP)
Castor

1
@Castor:mod_headers是否在两个服务器上都可用?并允许您覆盖FileInfo(请参见httpd.apache.org/docs/2.2/mod/core.html#allowoverride)?
浓汤

@Gumbo是的,mod_headers在两个服务器上均可用。是的,我被允许重写FileInfo。
Castor

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

14

如果您可以访问php.ini,请设置expose_php = Off


3
好吧,我从php代码获得了这项工作。header(“ X-Powered-By:”); 将X-Powered-By标头设置为没有将其删除。感谢您的宝贵时间和建议。
Castor


4

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

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

无论php.ini中的Exposure_php设置如何


0

这个解决方案对我有用:)

请在脚本中添加以下行并检查。

可能不需要Ngnix / Apache等级别的设置。

header("Server:");
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.