カテゴリー
ウェブ関連

phpinfo() は有用だけど…

phpinfo() の公開は攻撃者に悪用されるリスクがあります。悪質なスキャンボットはよくあるファイル名 phpinfo.php を狙い、環境情報を収集します。対策としては許可された IP のみアクセス可能にすることが有効です。

phpinfo()コマンドは PHP 環境の詳細情報を出力する非常に便利な関数です。開発環境やトラブルシューティングでも利用されます。

  • PHP バージョン
  • インストールされているモジュール
  • 設定値
  • 環境変数

しかし、この情報がブラウザ出力など、外部に公開されると、悪意のある攻撃者に利用されるリスクが高まります。もちろん、 phpinfo()自体が危険なわけではなく、それによって露見する脆弱性が問題なのですが、一般に閲覧させないに越したことはありません。

スパム行為が行われる背景と目的

phpinfoの出力

情報収集

攻撃者は phpinfo() の出力から、サーバー環境や PHP バージョン、インストールされているモジュールを把握します。この情報は特定の脆弱性を狙った攻撃に使用されます。

サーバー設定の弱点を突く

phpinfo() の出力には、環境変数や設定ファイルのパス、ロードされている拡張機能など、攻撃の足がかりとなる情報が含まれています。
特に DOCUMENT_ROOTSERVER_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)はスキャンボットに狙われやすいため、避けるべきです。
ランダムな名前や特定用途に応じた名前を使いましょう。

profile image

執筆:R3098

WEB サービス構築・監修が生業です。 WordPress 関連では Aurora Heatmap などプラグイン開発も行っています。悩めるサイト運営者の無料相談受付けます!

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトは reCAPTCHA によって保護されており、Google のプライバシーポリシー および 利用規約 に適用されます。

reCaptcha の認証期間が終了しました。ページを再読み込みしてください。