PHPプロ!TIPS+

PHPファイルの応答ヘッダーに含まれるPHPバージョンを隠蔽する

ヘッダー情報からサーバーで使用している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つ共に設定をすることで効果が得られます。細かい設定項目を理解して対策をしっかり取ることがセキュリティへのリスクを減らすことなのです。使用しているアプリケーションの設定できる項目を知ることで、いろいろ知らなかった発見ができるはずです。

バックナンバーについて

TIPS-MLは、毎週金曜日に更新され、新しい記事が掲載されます。

Tipsꗗy[W 

Pick Up Q&A

Q
ログファイルの中の空のデータ行を削除したい
 このエントリーをはてなブックマークに追加 
A
ログのデータ個数(列数)が固定で、空のログが"<><><>"だと既知であれば if ($line === "<><><>") { continue; } で読み飛ばしてもいいのでは? ...

>>続きを読む

まずは配列や文字列の扱いから、じっくり勉強して行きましょう。

▲解説者:岡本(アシアル株式会社 教育コーディネーター兼 システムエンジニア)

Q&A掲示板 新着情報