サーバー構築

HTTPの応答ヘッダーに含まれるPHPバージョンを隠す方法

HTTPの応答ヘッダーに含まれるPHPバージョンを隠す方法
目次
  1. ヘッダー情報のサンプル(作業前)
  2. PHPのバージョンを隠す
  3. ヘッダー情報のサンプル(作業後)

PHPをインストールした状態のままで使用していると、HTTPの応答ヘッダーにPHPのバージョンが表示され、セキュリティーホールを狙った攻撃を受ける可能性があるのでバージョン情報を隠す方法をご紹介します。

ヘッダー情報のサンプル(作業前)

Google Chrome をお使いの方は、F12 → Network → Name Path から該当のページをクリックすればヘッダー情報を見ることが出来ます。その他にも確認する方法は色々あります。

Cache-Control:no-cache, must-revalidate, max-age=0
Connection:keep-alive
Content-Encoding:gzip
Content-Type:text/html; charset=UTF-8
Date:Sat, 12 Jul 2014 11:35:03 GMT
Expires:Wed, 11 Jan 1984 05:00:00 GMT
Link:<http://vpshiroba.com/>; rel=shortlink
Pragma:no-cache
Server:nginx
Transfer-Encoding:chunked
Vary:Accept-Encoding
X-Pingback:http://vpshiroba.com/xmlrpc.php
X-Powered-By:PHP/5.4.1

PHPのバージョンが、「PHP/5.4.1」と表示され大変危険な状態です。早速、バージョンを表示しないように php.ini を修正します。

PHPのバージョンを隠す

php.ini を修正します。
expose_php = On → expose_php = Off に変更します。

;;;;;;;;;;;;;;;;;
; Miscellaneous ;
;;;;;;;;;;;;;;;;;

; Decides whether PHP may expose the fact that it is installed on the server
; (e.g. by adding its signature to the Web server header).  It is no security
; threat in any way, but it makes it possible to determine whether you use PHP
; on your server or not.
; http://php.net/expose-php
expose_php = On
↓
expose_php = Off

設定反映

// php5-fpmの場合
# /etc/init.d/php5-fpm reload

// Apache2の場合
# /etc/init.d/apache2 reload

ヘッダー情報のサンプル(作業後)

ヘッダー情報確認すると、「X-Powered-By:」の項目が消えたことが分ります。これでPHPバージョン表示の対策は完了です。

Cache-Control:no-cache, must-revalidate, max-age=0
Connection:keep-alive
Content-Encoding:gzip
Content-Type:text/html; charset=UTF-8
Date:Sat, 12 Jul 2014 12:04:53 GMT
Expires:Wed, 11 Jan 1984 05:00:00 GMT
Link:<http://vpshiroba.com/>; rel=shortlink
Pragma:no-cache
Server:nginx
Transfer-Encoding:chunked
Vary:Accept-Encoding
X-Pingback:http://vpshiroba.com/xmlrpc.php

サーバーを構築するときは、バージョンを隠す事を常に意識して構築してくださいね。

尚、PHPプログラムのバージョンを取得する関数 phpversion() には影響はありません。

2026年11月時点の補足

2026年11月時点でも、PHP の既定値は expose_php = On のままです。Debian 13 のサーバー(PHP 8.5)で、何も変えていないコマンドライン用の設定を見ると On になっていました。Web 用(PHP-FPM)の php.ini は、Off に直した後です。

$ php -i | grep expose_php
expose_php => On => On
$ grep -n "^expose_php" /etc/php/8.5/fpm/php.ini
395:expose_php = Off

今の Debian では、php.ini は /etc/php/(版)/fpm/php.ini にあり、変更後は systemctl reload php8.4-fpm(版は環境に合わせる)で反映します。あわせて、Nginx の Server ヘッダーから版番号を消す設定もしておきます。

# /etc/nginx/nginx.conf の http { } の中
server_tokens off;

# nginx -t && systemctl reload nginx
$ curl -sI https://example.com/ | grep -iE "^(server|x-powered-by)"
server: nginx
2026年11月時点の補足:隠す設定の早見表
見えるもの止める設定書く場所
X-Powered-By: PHP/8.xexpose_php = Offphp.ini(PHP-FPM 側)
Server: nginx/1.26.3server_tokens off;nginx.conf の http { }
Server: Apache/2.4.x (Debian)ServerTokens Prod と ServerSignature Off/etc/apache2/conf-available/security.conf
確かめる場所コマンド注意
PHP-FPM の設定php-fpm8.4 -i | grep expose_phpphp -i はコマンドライン用の php.ini を見る
実際の応答curl -sI https://example.com/CDN の裏では Server が CDN の名前になる

⚠ 2026年11月時点でも、バージョンを隠すのは攻撃の手間を少し増やすだけです。いちばん効くのは、セキュリティ更新を入れ続けることです。