本番用のWebサーバでは利用しているソフトウェアのバージョン情報を表示しません。 例えば何らかの事情で最新版を利用していないことがわかると簡単に脆弱性を突かれてしまいます。また直接的に攻撃をされなくともクラックのきっかけになりますので不要な情報を第三者に公開すべてきではないというのがセオリーです。
そこで今回はApacheとPHPのバージョン情報を出力しない設定を施したいと思います。
Apache
ServerTokens
HTTPヘッダに出力される情報を抑制します。
ServerTokens Prod
デフォルトだとApacheのバージョンやサーバのOS、PHPを入れている場合はその情報も出力されます。
ServerTokens
をProdにするとApacheであることはわかる物の、それ以外の情報が出力されなくなります。
指定 | 出力内容 |
---|---|
Prod | Apache |
Major | Apache/2 |
Minor | Apache/2.0 |
Min | Apache/2.0.41 |
OS | Apache/2.0.41 (Unix) |
Full | Apache/2.0.41 (Unix) PHP/4.2.2 MyMod/1.2 |
デフォルトはFullです。
ServerSignature
NotFoundなどApacheが出力するページのフッター部分に情報が出力されるのを防ぎます。 2.4ではデフォルトでOffですので通常は設定する必要はありません。
ServerSignature Off
ServerSignature
をOnにすると以下のようにApacheのバージョンはPHPを入れている場合はその情報も出力されます。
PHP
Header unset
PHPのバージョン情報も消しておきます。
Header always unset X-Powered-By
デフォルトでは以下のようにX-Powered-By
ヘッダにPHPのバージョンが出力されています。
Header unset
することによりレスポンスヘッダから削除することができます。
実行にはmod_headers
モジュールをロードする必要があります。
$ grep 'mod_headers' httpd.conf LoadModule headers_module libexec/apache2/mod_headers.so
※ 設定でalwaysが抜けていたので追記しました
php.ini
Apache側だけだと何かの拍子に(設定ミスなどで)出力されてしまう懸念もあります。そこでPHP側の設定でもOFFにしておきます。php.ini
のexpose_php
の値をOff
に書き換えます。
expose_php = Off
Apache側の設定(Header unset
)をコメントアウトしてもHTTPヘッダにPHPのバージョンが一切表示されなくなるのが確認できます。php.ini
の編集後はApacheの再起動をお忘れなく。