ホームページ  >  記事  >  バックエンド開発  >  PHPで実際のIPを特定する方法

PHPで実際のIPを特定する方法

(*-*)浩
(*-*)浩オリジナル
2019-09-12 11:06:152157ブラウズ

PHP でクライアント IP を取得するために使用される変数は次のとおりです:

PHPで実際のIPを特定する方法

##$_SERVER['HTTP_CLIENT_IP'] これヘッダーは存在しますが、それはまれであり、必ずしもすべてのサーバーで実装されているわけではありません。クライアントは偽装される可能性があります。 (推奨学習:

PHP プログラミングの入門から習熟まで )

$_SERVER['HTTP_X_FORWARDED_FOR'] は、HTTP プロキシ後のクライアント IP アドレスを識別するために使用される標準定義です。形式: clientip,proxy1 、プロキシ2。詳細な説明については、http://zh.wikipedia.org/wiki/X-Forwarded-F... を参照してください。クライアントは偽装される可能性があります。

$_SERVER['REMOTE_ADDR'] は信頼できます。これはサーバーと握手する最後の IP です。ユーザーのプロキシ サーバーまたは独自のリバース プロキシである可能性があります。クライアントは偽造できません。

クライアントが偽造できるパラメータはフィルタリングして検証する必要があります。多くの人は $_SERVER 変数の内容が信頼できると考えていますが、実際にはそうではありません。$_SERVER['HTTP_CLIENT_IP'] と $_SERVER['HTTP_X_FORWARDED_FOR'] は両方ともクライアント リクエストのヘッダーから取得されます。

ユーザーの実際の IP を厳密に取得したい場合は、

アンチクローラーやアンチ投票が使用されている場合、クライアントが偽造できるものは何も信頼しません。これは厳密に取得されています。

CDN はなく、ユーザーは PHP サーバーに直接接続します

この場合、TCP 層ハンドシェイクの IP、$_SERVER['REMOTE_ADDR']## を使用します。 #nginx を使用して自作クラスターで負荷分散を実装する場合

この場合、PHP アプリケーション サーバーを外部に公開することはできません。実際の IP を取得します。 nginx でそれを PHP サーバーに送信します。

location /{
   proxy_set_header client-real-ip $remote_addr;
}
client-real-ip 自分で名前を付けることができ、nginx とシェイクハンドする tcp 層の ip を PHP に転送します。

CDN を使用する場合、PHP サーバーからソースを取得するときに、

CDN はクライアントのハンドシェイク IP を転送します。各社のポリシーが異なります。詳細については、CDN のドキュメントを確認してください。

もちろん、厳密な検証が必要なビジネスを第 2 レベルのドメイン名に関連付け、独自の nginx サーバーを個別に使用して CDN を回避することもできます。

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

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