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

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 = Onexpose_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() には影響はありません。

読んで頂いて有り難うございます!