如何在 HTTP 头中隐藏 PHP 版本号

PHP 配置默认允许服务器在 HTTP 响应头 X-Powered-By 中显示安装在服务器上的 PHP 版本。

出于服务器安全原因(虽然不是主要的要担心的威胁),建议你禁用或隐藏此信息,避免那些针对你的服务器的攻击者知道你是否运行了 PHP。

假设你服务器上安装的特定版本的 PHP 具有安全漏洞,而攻击者了解到这一点,他们将更容易利用漏洞并通过脚本访问服务器。

在我以前的文章中,我已经展示了如何隐藏 apache 版本号,你已经看到如何不再显示 apache 的安装版本。但是如果你在你的 apache 服务器上运行 PHP,你还需要隐藏 PHP 的安装版本,这我们将在本文中展示。

因此,在本文中,我们将解释如何隐藏或关闭服务器 HTTP 响应头中的 PHP 版本号。

此设置可以在加载的 PHP 配置文件中配置。如果你不知道此配置文件在服务器上的位置,请运行以下命令找到它:


  1. $ php -i | grep "Loaded Configuration File"

PHP 配置文件位置


  1. ---------------- 在 CentOS/RHEL/Fedora 上----------------
  2. Loaded Configuration File => /etc/php.ini
  3. ---------------- 在 Debian/Ubuntu/Linux Mint 上----------------
  4. Loaded Configuration File => /etc/php/7.0/cli/php.ini

在对 PHP 配置文件进行任何更改之前,我建议您首先备份您的 PHP 配置文件,如下所示:


  1. ----------------在 CentOS/RHEL/Fedora 上----------------
  2. $ sudo cp /etc/php.ini /etc/php.ini.orig
  3. ---------------- 在 Debian/Ubuntu/Linux Mint 上----------------
  4. $ sudo cp /etc/php/7.0/cli/php.ini /etc/php/7.0/cli/php.ini.orig

用你最喜欢的编辑器,使用超级用户权限打开文件:


  1. ---------------- 在 CentOS/RHEL/Fedora 上----------------
  2. $ sudo vi /etc/php.ini
  3. ----------------在 Debian/Ubuntu/Linux Mint 上----------------
  4. $ sudo vi /etc/php/7.0/cli/php.ini

定位到关键词 expose_php,并将值设置成 Off


  1. expose_php = Off

保存并退出文件。之后,重启 web 服务器:


  1. ---------------- 使用 SystemD ----------------
  2. $ sudo systemctl restart httpd
  3. $ sudo systemctl restart apache2
  4. ---------------- 使用 SysVInit ----------------
  5. $ sudo service httpd restart
  6. $ sudo service apache2 restart

最后,不过同样重要,使用下面的命令检查服务器 HTTP 响应头是否仍然显示你的 PHP 版本号。


  1. $ lynx -head -mime_header http://localhost
  2. 或者
  3. $ lynx -head -mime_header http://server-address

这里的标志含义是:

  • -head – 发送一个请求 mime 报头的 HEAD 请求。
  • -mime_header – 打印所提取文档的 MIME 标头及其源代码。

注意: 确保你系统中已经安装了命令行 web 浏览器 lynx

就是这样了!在本文中,我们解释了如何隐藏服务器 HTTP 响应头中的 PHP 版本号以保护 web 服务器免受可能的攻击。

原文发布时间为:2017-02-05

本文来自合作伙伴“Linux中国”

时间: 2024-08-03 13:33:36

如何在 HTTP 头中隐藏 PHP 版本号的相关文章

PHP/如何在Linux服务器中隐藏PHP版本

通常,大多数默认设置安装的web服务器存在信息泄露,这其中之一就是PHP.PHP 是如今流行的服务端html嵌入式语言(之一?).在如今这个充满挑战的时代,有许多攻击者会尝试发现你服务端的漏洞.因此,我会简单描述如何在Linux服务器中隐藏PHP信息. 默认上expose_php默认是开的.关闭"expose_php"参数可以使php隐藏它的版本信息. [root@centos66 ~]# vi /etc/php.ini 在你的php.ini, 定位到含有expose_php的那行把O

如何在Linux服务器中隐藏PHP版本

如何在Linux服务器中隐藏PHP版本 通常,大多数默认设置安装的web服务器存在信息泄露,这其中之一就是PHP.PHP 是如今流行的服务端html嵌入式语言(之一?).在如今这个充满挑战的时代,有许多攻击者会尝试发现你服务端的漏洞.因此,我会简单描述如何在Linux服务器中隐藏PHP信息. 默认上expose_php默认是开的.关闭"expose_php"参数可以使php隐藏它的版本信息. [root@centos66 ~]# vi /etc/php.ini 在你的php.ini,

如何在WPS文字中隐藏文字和添加拼音

  WPS可能大家经常用,但是有一项功能大家或许还不是很了解,在WPS文字中隐藏文字和添加拼音,因为基本过了小学,我们在写作时就不怎么用到拼音了,毕竟,再不济还有字典呢. 这里,小编将通过WPS文字在制作语文考卷时的实际运用,来为大家介绍如何在WPS文字中隐藏文字和添加拼音. 1.隐藏文字 在作业与测试中,经常需要学生们填空,有时没有标准答案,可以随意填写,批改作业与试卷时也可以灵活操作.而有时必须填写标准答案,这在批改作业与试卷时就不可随意了,要与标准答案比对评判,我们手上就需要有一份带标准答

如何在win7电脑中隐藏U盘盘符?

  如何在win7纯净版中隐藏咱们的U盘盘符,以后大家将重要的东西全部存放在自己的U盘中,就不怕出现被偷的情况了! 1.首先,咱们同时按下win+R打开电脑的运行窗口,然后在其中输入regedit并单击回车. 2.打开电脑的注册表编辑器窗口之后,咱们在左侧会看到一个菜单,内容是比较多的,毕竟注册表的职责是管理着电脑中庞大的数据库,下面,咱们在左侧菜单中依次展开HKEY_CURRENT_USER/software/Microsoft/windows/CurrentVersion/Policies/

在Linux系统的服务器上隐藏PHP版本号的方法

  这篇文章主要介绍了在Linux系统的服务器上隐藏PHP版本号的方法,有助于预防攻击者针对PHP详细版本的漏洞而发起的攻击,需要的朋友可以参考下 通常,大多数默认设置安装的web服务器存在信息泄露,这其中之一就是PHP.PHP 是如今流行的服务端html嵌入式语言(之一?).在如今这个充满挑战的时代,有许多攻击者会尝试发现你服务端的漏洞.因此,我会简单描述如何在Linux服务器中隐藏PHP信息. 默认上expose_php默认是开的.关闭"expose_php"参数可以使php隐藏它

教你在header中隐藏php的版本信息_php技巧

前言 在php渲染的网页header信息中,会包含php的版本号信息,比如: X-Powered-by: php/5.3.3,这有些不安全,有些黑客可能采用扫描的方式,批量寻找低版本的php服务器,利用php漏洞(比如hash冲突)来攻击服务器. php.ini中有一个选项可以控制是否暴露这个信息,那就是: expose_php = On 默认值是On,改成Off之后,就不会显示php版本信息啦. 或者在php-fpm的pool配置文件中设置: php_admin_flag[expose_php

MySQL如何在ps命令下隐藏命令行中的密码

在命令行中输入命令并不是一个好主意,会造成安全问题.(见另外一篇文章<MySQL密码输入的安全操作>)但是如果你决定去写一个应用,而这个应用需要在命令行中使用密码或者其他敏感信息.那么,你能通过以下方法禁止系统的其他用户轻易的看到这些敏感数据 呢?,类似MySQL在ps命令下隐藏密码. 假设我这里系统里两个用户,一个是root ,一个是dabu .测试系统为centos 6.5在按照下面的步骤做: [root@dabu.info ~]#su dabu #切换到dabu这个账号 [dabu@da

如何在DataGrid控件中隐藏列

datagrid|datagrid控件 如何在DataGrid控件中隐藏列前言:    asp.net在提供我们丰富的内置控件方便我们开发的同时,一些格式化的东西也限制了我们灵活的要求.在DataGrid控件中,我们遇到的一个非常典型的问题就是如何把我们不想显示的列根据需要随时隐藏掉.解决方案:    我们不能隐藏在DataGrid里自动生成列的主要的一点原因是:DataGrid里的column不能被DataGrid的属性DataGridColumn增加.    基于以上原因,我们可以提出两种不

如何在ASP.NET程序中显示程序集版本号

  于很多有趣的原因,ASP.NET程序中虽然可以往App_code目录中追加AssemblyInfo.cs文件,但位于该文件中的版本号总是无法正确的显示在用户面前. 如果你通过下面的语句企图像其他.NET应用程序一样获取Assembly中的版本号的话,你将永远得到一个0.0.0.0的字符串. System.Reflection.Assembly.GetAssembly(this.GetTyp e()).GetName().Version.ToString(); 很多人能说出一堆理由来告诉我企图