ホームページ >バックエンド開発 >PHPチュートリアル >PHP で最も正確なユーザー IP アドレスを取得するにはどうすればよいですか?

PHP で最も正確なユーザー IP アドレスを取得するにはどうすればよいですか?

Linda Hamilton
Linda Hamiltonオリジナル
2024-12-15 04:27:09312ブラウズ

How Can I Get the Most Accurate User IP Address in PHP?

PHP での最も正確なユーザー IP アドレスの決定

PHP を使用してユーザーの IP アドレスを取得する場合、考慮できるサーバー変数が複数あります。絶対確実な方法はありませんが、この記事では、これらの変数に基づいて最も正確なアプローチを検討します。

Background

$_SERVER 配列には、IP アドレス情報を提供する可能性のある多数のヘッダーが含まれています。 。ただし、これらのヘッダーの信頼性と精度は、プロキシ構成とネットワーク トポロジによって異なる場合があります。

一般的に使用される方法

従来、次のシーケンスを使用してヘッダーを取得してきました。ユーザーの IP アドレス:

  1. を確認してくださいHTTP_CLIENT_IP
  2. 存在しない場合は、HTTP_X_FORWARDED_FOR を確認し、カンマ区切りの値を繰り返し処理します
  3. HTTP_X_FORWARDED、HTTP_X_CLUSTER_CLIENT_IP、HTTP_FORWARDED_FOR、およびHTTP_FORWARDED
  4. REMOTE_ADDR をフォールバックとして使用します

最適化されたアプローチ

精度とパフォーマンスを向上させるために、このシーケンスは次のように最適化されています。

function get_ip_address() {
    $headers = ['HTTP_CLIENT_IP', 'HTTP_X_FORWARDED_FOR', 'HTTP_X_FORWARDED', 'HTTP_X_CLUSTER_CLIENT_IP', 'HTTP_FORWARDED_FOR', 'HTTP_FORWARDED', 'REMOTE_ADDR'];

    foreach ($headers as $header) {
        if (isset($_SERVER[$header]) && ($ip = trim($_SERVER[$header]))) {
            if (filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_NO_PRIV_RANGE | FILTER_FLAG_NO_RES_RANGE)) {
                return $ip;
            }
        }
    }

    return null;
}

注意

このアプローチでは、ほとんどのプロキシの背後にあるユーザーの IP アドレスが取得されますが、次の点に注意することが重要です。

  • REMOTE_ADDR は、ほとんどの目的において、依然として最も信頼できる IP アドレス情報のソースです。
  • これこのソリューションでは、悪意のあるユーザーによる IP アドレスのスプーフィングを防ぐことはできません。
  • ミッション クリティカルなアプリケーションの場合は、セキュリティを強化するための追加の対策を検討してください。

追加の注意事項

  • validate_ip() 関数は、PHP filter_var() を使用するように最適化されました。
  • 簡略化のため、IPv6 検証は含まれていません。
  • プロキシから取得された IP アドレスは、ユーザーの物理的な位置を正確に表していない可能性があることに注意してください。

以上がPHP で最も正確なユーザー IP アドレスを取得するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。