使用Nginx时如何隐藏PHP 5/7版本

时间:2020-01-09 14:16:37  来源:igfitidea点击:

在Apline Linux服务器上运行PHP 5.6.xx和Nginx服务器。
如何隐藏X-Powered-By:PHP/5.6.32或x-powered-by:PHP/7.3.6 HTTP标头。
将Nginx与PHP-fpm5或PHP-fpm7一起使用时,如何隐藏PHP版本?
默认情况下,客户端/用户/浏览器会看到有关您的PHP和Web服务器版本的信息。
如果您忘记更新PHP版本,则攻击者可以使用版本信息来攻击或查找PHP版本中的漏洞。

让我们看看如何在Linux或类似Unix的系统上隐藏PHP版本。

如何使用CLI找出PHP版本

解决方法:您需要使用curl命令,如下所示:

curl -IL https://some-server-ip-OR-domain-name/
curl -IL https://server1.theitroad.local/

输出示例:

HTTP/2 200 
server: nginx
date: Sun, 23 Jun 2019 20:48:48 GMT
content-type: text/html; charset=UTF-8
x-powered-by: PHP/7.3.6
expires: Thu, 19 Nov 1981 08:52:00 GMT
cache-control: no-store, no-cache, must-revalidate
pragma: no-cache
x-robots-tag: noindex, noarchive
strict-transport-security: max-age=15768000
x-content-type-options: nosniff
x-frame-options: SAMEORIGIN
x-xss-protection: 1; mode=block
x-whome: l-cbz01
referrer-policy: no-referrer-when-downgrade

隐藏您的PHP版本

解决方法:您需要根据Linux/Unix变体来编辑/创建一个名为custom.ini的文件。
不要编辑php.ini文件,因为它可能会用您的PHP版本进行更新/替换。
参考路径:

  • Alpine Linux和PHP v5.6.xx:/etc/php5/conf.d/custom.ini
  • Alpine Linux和PHP v7.xx:/etc/php7/conf.d/custom.ini
  • Debian/Ubuntu Linux和PHP v7.xx:/etc/php/7.0/fpm/conf.d/custom.ini
  • RHEL/Fedora/CentOS Linux:/etc/php.d/custom.ini

您始终可以使用php*和grep命令找到php目录位置:

$ php -i | more
$ php -i | grep -i -A4 'Additional .ini files parsed'
$ php-fpm5 -i | grep -i -A4 'Additional .ini files parsed'
$ php-fpm7.0 -i | grep -i -A4 'Additional .ini files parsed'

示例输出(查找存储所有.ini文件的目录名称):

Configuration File (php.ini) Path => /etc/php/7.0/fpm
Loaded Configuration File => /etc/php/7.0/fpm/php.ini
Scan this dir for additional .ini files => /etc/php/7.0/fpm/conf.d
Additional .ini files parsed => /etc/php/7.0/fpm/conf.d/10-mysqlnd.ini,
/etc/php/7.0/fpm/conf.d/10-opcache.ini,
/etc/php/7.0/fpm/conf.d/10-pdo.ini,

根据您的设置将以下行添加到custom.ini:

##############################################
## this is for Alpine Linux and PHP v5.6.xx ##
##############################################
echo 'expose_php = off' >> /etc/php5/conf.d/custom.ini

对于Alpine Linux和PHP 7.x:

echo 'expose_php = off' >> /etc/php7/conf.d/custom.ini

重新启动/重新加载PHP

语法取决于您的PHP版本:

### [ Alpine linux restart php-fpm ] ##
$ sudo /etc/init.d/php-fpm restart
### [ RHEL/CentOS 5.x/6.x restart php-fpm  ] ##
$ sudo service php-fpm restart
### [ RHEL/CentOS 7.x restart php-fpm  ] ##
$ sudo systemctl restart php-fpm
### [ Debian/Ubuntu Linux latest restart php-fpm  ] ##
$sudo service php7.0-fpm restart
### [ FreeBSD restart php-fpm  ] ##
$ sudo service php-fpm restart
### [ Alpine Linux restart php-fpm7  ] ##
$ sudo /etc/init.d/php-fpm7 restart

验证

再次使用curl命令:

$ curl -IL https://some-server-ip-OR-domain-name/
$ curl -IL https://server1.theitroad.local/

输出示例:

HTTP/2 200 
server: nginx
date: Sun, 23 Jun 2019 20:56:01 GMT
content-type: text/html; charset=UTF-8
set-cookie: PHPSESSID=q49sd1armm17j7a8l658538n74; path=/
expires: Thu, 19 Nov 1981 08:52:00 GMT
cache-control: no-store, no-cache, must-revalidate
pragma: no-cache
x-robots-tag: noindex, noarchive
strict-transport-security: max-age=15768000
x-content-type-options: nosniff
x-frame-options: SAMEORIGIN
x-xss-protection: 1; mode=block
x-whome: l-cbz01
referrer-policy: no-referrer-when-downgrade

您还可以按以下方式使用nmap命令:

sudo nmap -sV --script=http-php-version server-ip-here
sudo nmap -sV --script=http-php-version server1.theitroad.local

输出示例:

[sudo] password for Hyman: 
Starting Nmap 7.70 ( https://nmap.org ) at 2019-06-24 02:26 IST
Nmap scan report for newsletter.theitroad.local (96.126.119.5)
Host is up (0.26s latency).
rDNS record for 96.126.119.5: nb-96-126-119-5.dallas.nodebalancer.linode.com
Not shown: 998 closed ports
PORT    STATE SERVICE  VERSION
80/tcp  open  http     nginx
|_http-server-header: nginx
443/tcp open  ssl/http nginx
|_http-server-header: nginx
 
Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 21.20 seconds

有关隐藏PHP版本的警告

该技术属于"通过隐秘性进行安全保护"。
即使组织外部的任何人都不允许查找有关PHP版本的任何信息,攻击者仍可以使用其他方法(例如指纹识别)来猜测或找到您的PHP版本。
我强烈建议您及时应用PHP/Nginx/Apache补丁并编写安全代码。
根据您的Linux/Unix变体,更新PHP非常简单:

在Ubuntu/Debian Linux上更新PHP和其他应用程序

执行以下apt命令/apt-get命令:

$ sudo apt update
$ sudo apt upgrade

在RHEL/CentOS/Fedora Linux上更新PHP和其他应用程序

执行以下yum命令:

$ sudo yum update

在Alpine Linux上更新PHP和其他应用程序

执行以下apk命令:

# apk update && apk upgrade