phpinfo()コマンドは PHP 環境の詳細情報を出力する非常に便利な関数です。開発環境やトラブルシューティングでも利用されます。
- PHP バージョン
- インストールされているモジュール
- 設定値
- 環境変数
しかし、この情報がブラウザ出力など、外部に公開されると、悪意のある攻撃者に利用されるリスクが高まります。もちろん、 phpinfo()自体が危険なわけではなく、それによって露見する脆弱性が問題なのですが、一般に閲覧させないに越したことはありません。
スパム行為が行われる背景と目的
情報収集
攻撃者は phpinfo() の出力から、サーバー環境や PHP バージョン、インストールされているモジュールを把握します。この情報は特定の脆弱性を狙った攻撃に使用されます。
サーバー設定の弱点を突く
phpinfo() の出力には、環境変数や設定ファイルのパス、ロードされている拡張機能など、攻撃の足がかりとなる情報が含まれています。
特に DOCUMENT_ROOT
や SERVER_SOFTWARE
などは、サーバーの構成を特定するために利用されます。
自動スキャンボットの活動
多くのスパム行為は自動化されたスクリプト(スキャナー)によって行われます。これらは phpinfo.php のような一般的なスクリプトをスキャンして、不正利用可能な情報を収集します。
ターゲットスクリプトの探索
開発環境やデバッグ用に設置された phpinfo.php が本番環境にそのまま残されているケースを狙います。このようなスクリプトは攻撃者にとって格好の標的です。
phpinfo()の情報に IP 制限を掛ける
特定の IP アドレスのみ phpinfo() にアクセスを許可する仕組みは、これらのスパム行為を未然に防ぐ効果的な手段です。
限定的なアクセス権
信頼できる IP アドレスのみアクセスを許可することで、スパムや不正アクセスを完全に排除します。
一般的なスキャナーボットや攻撃者は IP アドレスの制限を回避できません。そのため、この仕組みは非常に効果的な防御手段です。
<?php
// 許可する IP アドレスを指定
$allowed_ips = ['192.168.1.100', '192.168.1.101'];
// リバースプロキシ環境に対応
$client_ip = $_SERVER['HTTP_X_FORWARDED_FOR'] ?? $_SERVER['REMOTE_ADDR'];
// リクエスト元の IP アドレスを確認
if (!in_array($client_ip, $allowed_ips)) {
// アクセスを拒否
http_response_code(403); // 403 Forbidden ステータスコードを送信
echo "Access denied. Your IP: " . htmlspecialchars($client_ip);
exit;
}
// 許可された IP のみ実行
phpinfo();
?>
$allowed_ips 配列に指定された IP アドレスのみアクセスを許可します。クライアントの IP アドレスは HTTP_X_FORWARDED_FOR
(リバースプロキシ環境下)または REMOTE_ADDR
(通常環境)から取得します。
許可されていない IP アドレスからのアクセスには、 HTTP ステータスコード 403 Forbidden を返し、アクセスを拒否します。 IP チェックを通過したリクエストに対してのみ phpinfo() を実行します。
ファイル名のポイント
ファイル名はセキュリティと管理のバランスから、分かりやすく、かつ推測されにくい名前を付けるのが理想的です。一般的な名前(例: phpinfo.php)はスキャンボットに狙われやすいため、避けるべきです。
ランダムな名前や特定用途に応じた名前を使いましょう。