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

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

Barbara Streisand
リリース: 2024-12-17 00:47:25
オリジナル
177 人が閲覧しました

How to Get a User's Accurate IP Address in PHP?

PHP でユーザーの IP アドレスを正確に決定する方法

はじめに

ユーザーの IP アドレスの取得PHP の正確な IP アドレスは、IP ベースに依存するアプリケーションにとって非常に重要です。地理位置情報、不正行為の検出、またはアクセス制御。ただし、プロキシ、ロード バランサー、その他のネットワーク構成を使用するため、正しい IP アドレスを抽出することが困難になる場合があります。

IP アドレス取得のベスト プラクティス

確実な方法はありません。最も正確なアプローチについては一般的なコンセンサスがあります。 PHP:

$_SERVER 変数の使用

PHP には、IP アドレスが含まれる可能性があるいくつかの $_SERVER 変数が用意されています情報:

  • HTTP_CLIENT_IP
  • HTTP_X_FORWARDED_FOR
  • HTTP_X_FORWARDED
  • HTTP_X_CL USTER_CLIENT_IP
  • HTTP_FORWARDED_FOR
  • HTTP_FORWARDED
  • REMOTE_ADDR

検証信頼性

すべての $_SERVER 変数が同等に信頼できるわけではありません。多くの場合、HTTP_CLIENT_IP と REMOTE_ADDR が最も信頼性が高くなりますが、HTTP_X_FORWARDED_FOR は簡単にスプーフィングされる可能性があります。

正確な IP 取得のための最適化されたコード

次のコード スニペットは、次の点を考慮して最適化されています。関連するすべての $_SERVER変数:

function get_ip_address() {
    if (!empty($_SERVER['HTTP_CLIENT_IP']) && filter_var($_SERVER['HTTP_CLIENT_IP'], FILTER_VALIDATE_IP)) {
        return $_SERVER['HTTP_CLIENT_IP'];
    }

    if (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {
        $iplist = explode(',', $_SERVER['HTTP_X_FORWARDED_FOR']);
        foreach ($iplist as $ip) {
            if (filter_var(trim($ip), FILTER_VALIDATE_IP)) {
                return $ip;
            }
        }
    }

    return $_SERVER['REMOTE_ADDR'];
}
ログイン後にコピー

REMOTE_ADDR に関する資格

REMOTE_ADDR は一般に信頼性がありますが、依然としてスプーフィングの傾向があります。絶対的な IP 精度を必要とするアプリケーションの場合は、クライアント証明書や IP レピュテーション データベースの検査など、より厳格な検証方法の使用を検討してください。

その他の考慮事項

  • IP 範囲の検証: FILTER_FLAG_NO_PRIV_RANGE で filter_var() を使用し、 FILTER_FLAG_NO_RES_RANGE はプライベート IP アドレスと予約済み IP アドレスを破棄します。
  • IPv6 アドレスの検証: IPv6 トラフィックが予想される場合は、IPv6 アドレスも処理できるように検証コードを変更します。
  • プロキシ検出を検討する: フラグを立てて、プロキシは IP アドレスの取得を歪める可能性があるため、プロキシ トラフィックを処理します。

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

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート