ホームページ >バックエンド開発 >PHPの問題 >PHPで実際のIPを取得する方法

PHPで実際のIPを取得する方法

PHPz
PHPzオリジナル
2022-06-14 19:46:393408ブラウズ

PHPで実際のIPを取得する方法

PHP では、要求された IP を取得する一般的な方法は、通常 3 つのスーパー グローバル変数を使用することですが、IP を取得する 3 つの方法が完全に信頼できるわけではないことは明らかです。

$_SERVER['REMOTE_ADDR'];             // 客户端与服务器握手IP,如果使用代理则会获取到代理IP
$_SERVER['HTTP_CLIENT_IP'];          // 代理服务器发送的HTTP头(可伪造)
$_SERVER['HTTP_X_FORWARDED_FOR'];    // 用户是在哪个IP使用的代理(可伪造)

ドメイン名がプロキシされていない場合、一般に安全な方法は REMOTE_ADDR です。海外のネットワークの場合、最も安全な方法は、クラウド ベンダーが提供する信頼できるソース IP 取得方法を提供することです。 Google Cloud:

PHPで実際のIPを取得する方法

偽造 IP が表示されない場合、X-forwarded-For は通常、クライアントの実際の IP であり、負荷分散 IP

IP が表示され、Google Cloud がコンテンツを偽造します。プレフィックスの場合、形式は 、クライアントの実際の IP、負荷分散 IP

です。したがって、偽造かどうかに関係なく、文字列をカンマで切り取り、最後から 2 番目の X-forwarded を見つけます。値については、実際のクライアント IP を取得できます。

もちろん、ドメイン名クラウド ベンダーが同様のドメイン名情報を提供していない場合、スーパー グローバル変数を介して単純に情報を取得することはできません。

ドメイン名クラウド ベンダーが対応するリクエスト ソース IP 情報を提供しない場合、サーバーとの対話を通じて確認メカニズムをネゴシエートすることもできます。

同様: HTTP リクエストヘッダに送信元 IP 情報を付加して判定する サーバー間の通信処理であるため、偽造者は偽造物の具体的な情報内容を知ることができず、通常はこのようなやり取りは信頼できます。

判定ロジック処理

サーバA: HTTPリクエストヘッダに変数MY_REALIP_c32fsjk234 => "1.2.3.4"を追加します。シンプルで、MY_REALIP_c32fsjk234

リクエスター B を受け入れる: $_SERVER['MY_REALIP_c32fsjk234'] を使用して決定するのと同様に、変数名としてランダムなキーに同意することが双方にとって最善です。リクエストヘッダーに MY_REALIP_c32fsjk234 変数が含まれているかどうかを確認し、含まれている場合は、対応する IP を実 IP として取得します。

元のリンク: https://blog.csdn.net/panguangyu/article/details/122211682

推奨書籍:

PHP チュートリアル

#

以上がPHPで実際のIPを取得する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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