ホームページ >バックエンド開発 >PHPチュートリアル >PHP でユーザーの IP アドレスを正確に取得するにはどうすればよいですか?
PHP でユーザーの IP アドレスを正確に取得する方法
PHP でユーザーの IP アドレスを取得することは、次のような使用方法があるため、困難な作業になる可能性があります。プロキシやその他の要因により、真の IP アドレスが不明瞭になる可能性があります。利用可能な方法は複数ありますが、それぞれに独自の制限がありますが、最も効果的な方法を理解することで正確な IP 取得を保証できます。
一般的な方法の 1 つは、$_SERVER グローバル変数を利用することです。 IP 情報が含まれる可能性のあるさまざまなヘッダーが提供されます。このうち、REMOTE_ADDR には、最後に認識されたクライアントの IP アドレスが保持されます。ただし、この方法は簡単にスプーフィングされる可能性があるため、信頼できるとは考えられていません。
これに対処するために、PHP 開発者は、複数の $_SERVER ヘッダーを活用する、より包括的なアプローチを開発しました。このアプローチには、HTTP_CLIENT_IP を介して共有インターネット/ISP IP アドレスを確認することが含まれます。さらに、HTTP_X_FORWARDED_FOR、HTTP_X_FORWARDED、HTTP_X_CLUSTER_CLIENT_IP、HTTP_FORWARDED_FOR などのヘッダーを介してプロキシを通過する IP アドレスを検査します。 HTTP_FORWARDED.
これらのヘッダーのいずれかがより正確な IP アドレスを提供すると想定されています。有効性を確保するために、関数 validate_ip を使用してプライベート ネットワークと無効な IP アドレスを除外します。
質問で提供されているコードの簡略版は次のとおりです:
function get_ip_address(){ foreach (array('HTTP_CLIENT_IP', 'HTTP_X_FORWARDED_FOR', 'HTTP_X_FORWARDED', 'HTTP_X_CLUSTER_CLIENT_IP', 'HTTP_FORWARDED_FOR', 'HTTP_FORWARDED', 'REMOTE_ADDR') as $key){ if (array_key_exists($key, $_SERVER) === true){ foreach (explode(',', $_SERVER[$key]) as $ip){ $ip = trim($ip); // just to be safe if (filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_NO_PRIV_RANGE | FILTER_FLAG_NO_RES_RANGE) !== false){ return $ip; } } } } }
この方法は精度を大幅に向上させますが、独自のリクエスト ヘッダーを挿入する可能性のある悪意のあるユーザーの影響を受けやすいままです。ミッションクリティカルなアプリケーションの場合は、REMOTE_ADDR のみに依存することをお勧めします。
以上がPHP でユーザーの IP アドレスを正確に取得するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。