使用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