ホームページ >バックエンド開発 >PHPチュートリアル >$_SERVER パラメータ HTTP_X_FORWARDED_FOR および REMOTE_ADDR と IP_PHP の取得に関するチュートリアル
1.REMOTE_ADDR: 現在のページを閲覧しているユーザーのコンピューターの IP アドレス 2.HTTP_X_FORWARDED_FOR: 現在のページを閲覧しているユーザーのコンピューターのゲートウェイ 3.HTTP_CLIENT_IP: クライアントの IP
PHP で $_SERVER["REMOTE_ADDR"] を使用して、ただし、クライアントがプロキシ サーバーを使用してアクセスする場合、取得されるのはプロキシ サーバーの IP アドレスであり、実際のクライアントの IP アドレスではありません。プロキシ サーバー経由でクライアントの実際の IP アドレスを取得するには、$_SERVER["HTTP_X_FORWARDED_FOR"] を使用して読み取ります。
ただし、すべてのプロキシ サーバーが $_SERVER["HTTP_X_FORWARDED_FOR"] を使用してクライアントの実際の IP を読み取ることができるわけではないことに注意してください。このメソッドで読み取られる IP の一部は、依然としてプロキシ サーバーの IP です。
もう 1 つの注意点は、クライアントがプロキシ サーバーを介してアクセスしない場合、$_SERVER["HTTP_X_FORWARDED_FOR"] で取得される値は空になることです。したがって、プログラムでこのメソッドを使用したい場合は、次のように実行できます:
コードは次のとおりです | コードをコピー |
if ($_SERVER[" HTTP_X_FOWRWARDED_FOR"]=="") { $user_ip=$_SERVER["REMOTE_ADDR"]; } else $user_ip=$_SERVER["HTTP_X_FORWARDED_FOR"]; ?&gて; |
つまり、クライアントにプロキシ サーバーが渡された場合は、HTTP_X_FORWARDED_FOR の値が取得されます。プロキシ サーバーが渡されなかった場合は、REMOTE_ADDR の値が取得されます。
クライアントの実際のIPアドレスを取得します
コードは次のとおりです | コードをコピーします |
function GetIP(){ if (getenv("HTTP_CLIENT_IP") && strcasecmp(getenv(") HTTP_CLIENT_IP" ), " 不明")) $ip = getenv("HTTP_CLIENT_IP"); else if (getenv("HTTP_X_FORWARDED_FOR") && strcasecmp(getenv("HTTP_X_FORWARDED_FOR"), "不明")) $ ip = getenv(" HTTP_X_FORWARDED_FOR"); else if (getenv("REMOTE_ADDR") && strcasecmp(getenv("REMOTE_ADDR"), "unknown")) $ip = getenv("REMOTE_ADDR"); else if (isset($ _SERVER['REMOTE_ADDR']) && $_SERVER['REMOTE_ADDR'] && strcasecmp($_SERVER['REMOTE_ADDR'], “unknown”)) $ip = $_SERVER['REMOTE_ADDR']; else $ ip = “不明”; return($ip); } |
ユーザーのIPアドレスの3つの属性(HTTP_X_FORWARDED_FOR、HTTP_VIA、REMOTE_ADDR)の取得の違い
1. プロキシサーバーを使用しない場合:
REMOTE_ADDR = あなたのIP
HTTP_VIA = 値なしまたは表示されません
HTTP_X_FORWARDED_FOR = no値または表示されません
2. 透過的プロキシ サーバーを使用する場合: 透過的プロキシ
REMOTE_ADDR = 最後のプロキシ サーバー IP
HTTP_VIA = プロキシ サーバー IP
HTTP_X_FORWARDED_FOR = 複数のプロキシ サーバーを経由する場合、この値は次のようになります。次のようなものです: 203.98.182.163、203.98.182.163、203.129.72.215。
このタイプのプロキシ サーバーは依然としてあなたの情報を訪問者に転送するため、あなたの本当の身元を隠すという目的を達成することはできません。
3. 通常の匿名プロキシ サーバーを使用する状況: 匿名プロキシ
REMOTE_ADDR = 最後のプロキシ サーバー IP
HTTP_VIA = プロキシ サーバー IP
HTTP_X_FORWARDED_FOR = 複数のプロキシ サーバーを経由する場合、この値は次のようになります。 :203.98、182.163、203.98.182.163、203.129.72.215。
実際の IP を隠しますが、アクセスにプロキシ サーバーを使用していることを訪問者に明らかにします。
4. 不正なプロキシ サーバーの使用: プロキシの歪み
REMOTE_ADDR = プロキシ サーバーの IP
HTTP_VIA = プロキシ サーバーの IP
HTTP_X_FORWARDED_FOR = ランダムな IP 複数のプロキシ サーバーを経由する場合、この値は次のようになります: 203.98.182.163 、203.98.182.163、203.129.72.215。
訪問者に、プロキシ サーバーを使用していることを伝えますが、実際の IP の代わりに偽のランダム IP を作成してなりすますようにしてください。
5. 高匿名性プロキシ サーバーを使用する場合: 高匿名性プロキシ (エリート プロキシ)
REMOTE_ADDR = プロキシ サーバー IP
HTTP_VIA = 値なしまたは表示なし
HTTP_X_FORWARDED_FOR = 複数のプロキシ サーバーを経由する場合、値なしまたは表示なしこの値は、203.98.182.163、203.98.182.163、203.129.72.215 に似ています。
プロキシ サーバーを使用してオブジェクトに直接アクセスしているのと同じように、すべての情報をプロキシ サーバーの情報で完全に置き換えます。
コードは次のとおりです | コードをコピー |
if ($HTTP_SERVER_VARS["HTTP_X_FORWARDED_FOR"]) |