注: 上記のコードでは、getenv() と strcasecmp() という 2 つの関数が使用されています。前者の関数は、値が取得できた場合は値を返し、取得できなかった場合は false を返します。 $_SERVER はサーバーのスーパー グローバル変数配列です。$_SERVER['REMOTE_ADDR'] を使用してクライアントの IP アドレスを取得することもできます。 2 つの違いは、getenv が IIS isapi モードで実行される PHP をサポートしていないことです。 strcasecmp(string1, string2) 文字列関数の使用法は、string1 と string2 が等しい場合は 0 を返し、string1 が string2 より大きい場合は 0 より大きい数値を返します。 0未満が返されます。 この関数は最初にクライアント IP を使用します。それが機能しない場合は、REMOTE_ADDR を使用してください。 ここでは、同様の方法で IP スプーフィングと複数のプロキシ コードを考慮した、IP を検出する別の詳細な方法を示します。
参考と学習用に添付ファイル: 1. プロキシサーバーを使用せずに PHP を使用してクライアント IP を取得する方法: REMOTE_ADDR = クライアント IP HTTP_X_FORWARDED_FOR = 値がないか、表示されません 2. 透過的プロキシサーバーの使用: 透過的プロキシ REMOTE_ADDR = 最後のプロキシ サーバー IP HTTP_X_FORWARDED_FOR = クライアントの実際の IP (複数のプロキシ サーバーを経由する場合、この値は同様です: 221.5.252.160、203.98.182.163、203.129.72.215) このタイプのプロキシ サーバーは依然としてクライアントの実際の IP をアクセス先に送信するため、本当の身元を隠すという目的を達成できません。 3. 通常の匿名プロキシサーバーのPHPを使用してクライアントIPを取得する: 匿名プロキシ REMOTE_ADDR = 最後のプロキシ サーバー IP HTTP_X_FORWARDED_FOR = プロキシ サーバー IP (複数のプロキシ サーバーを経由する場合、この値は同様になります: 203.98.182.163、203.98.182.163、203.129.72.215) この場合、クライアントの実際の IP は隠されていますが、クライアントがプロキシ サーバーを使用してアクセスしていることがアクセス オブジェクトに明らかになります。 4. 欺瞞的なプロキシサーバーの使用: プロキシを歪める REMOTE_ADDR = プロキシ サーバーの IP HTTP_X_FORWARDED_FOR = ランダム IP (複数のプロキシ サーバーを経由する場合、この値は同様になります: 220.4.251.159、203.98.182.163、203.129.72.215) この場合、クライアントはプロキシ サーバーを使用していますが、クライアントの実際の IP ではなく偽のランダム IP (220.4.251.159) を捏造して騙していることも明らかになりました。 5. PHP と高匿名性プロキシ サーバーを使用してクライアント IP を取得する: 高匿名性プロキシ (エリート プロキシ) REMOTE_ADDR = プロキシ サーバーの IP HTTP_X_FORWARDED_FOR = 値がないか、表示されません REMOTE_ADDR であっても HTTP_FORWARDED_FOR であっても、異なるブラウザーや異なるネットワーク デバイスが異なる IP ヘッダー メッセージを送信する可能性があるため、これらのヘッダー メッセージは利用できない場合があります。そのため、PHP は $_SERVER["REMOTE_ADDR"] および $_SERVER["HTTP_X_FORWARDED_FOR" ] を使用します。取得される値は、null 値または「不明な」値である可能性があります。 |