ヘッダー情報からサーバーで使用しているPHPバージョンを特定されてしまい、そのバージョンのセキュリティーホールを狙った攻撃を受けてしまう可能性があります。今回は、ヘッダー情報からPHP・Apacheのバージョンを特定させない方法を紹介します。
対策がされていないサーバーへHTTPリクエストを送信し、実際にヘッダー情報を取得すると・・・
[root@localhost ~]$ telnet localhost 80 Trying 127.0.0.1... Connected to localhost.localdomain (127.0.0.1). Escape character is '^]'. GET /test.php HTTP/1.0 HTTP/1.1 200 OK Date: Fri, 26 Jan 2007 12:00:00 GMT Server: Apache/2.0.59 (Unix) Accept-Ranges: bytes X-Powered-By: PHP/5.2.0 Connection: close Content-Type: text/html Hello! Connection closed by foreign host.
上記のように、PHPのバージョンが表示されてしまい、もし、上記のバージョンに致命的なバグが見つかると、特定の攻撃を受けてしまう可能性があり、非常に危険な状態です。
そこで上記を表示させない対策を「php.ini」に行います。
expose_php=On
と記述されている箇所を
expose_php=Off
に変更してください。
また、変更後はApacheを再起動します。
再度、ヘッダー情報を取得して確認してみましょう。
[root@localhost ~]# telnet localhost 80 Trying 127.0.0.1... Connected to localhost.localdomain (127.0.0.1). Escape character is '^]'. GET /test.php HTTP/1.0 HTTP/1.1 200 OK Date: Fri, 26 Jan 2007 12:00:00 GMT Server: Apache/2.0.59 (Unix) Accept-Ranges: bytes Connection: close Content-Type: text/html Hello! Connection closed by foreign host
上記のように設定変更後はPHPのバージョン情報が表示されないようになります。
※上記の設定だけだと「Server: Apache/2.0.59 (Unix)」のようにApacheのバージョン情報が表示されてしまい、 PHPのバージョン情報と同じことがApacheにも起こるため、こちらについても非表示にする対策を行います。
非表示にするにはhttpd.confの設定を変更します。
今回の場合は、
ServerTokens OS
となっている部分があるはずなので、
ServerTokens ProductOnly
に変更してください。
Apacheを再起動後に確認すると
Server: Apache/2.0.59 (Unix) ↓ Server: Apache
となります。
Apacheの2.0.44以降では、ServerTokensディレクティブでApacheのエラーページに表示されるサーバー情報も同様に制御できますが、それ以前のバージョンではすべて表示されてしまうのでこちらも設定で非表示にしてしまいましょう。そのためには、「ServerSignature Off
」と設定または変更します。
PHPのバージョン情報とApacheのバージョン情報の隠蔽対策は、2つ共に設定をすることで効果が得られます。細かい設定項目を理解して対策をしっかり取ることがセキュリティへのリスクを減らすことなのです。使用しているアプリケーションの設定できる項目を知ることで、いろいろ知らなかった発見ができるはずです。
この記事は、アシアルが運営するPHP開発者のためのポータル&コミュニティサイト「PHPプロ!」で毎週配信しているPHP・TIPSメーリングリストを再録したものです。
同サイトでは、他にもPHP最新ニュースや、困ったときのQ&A掲示板、初心者向けのPHP講座など、PHP開発者をサポートする情報を掲載しています。