プロキシ経由のユーザのIPアドレスをプロキシサーバから取得 PHP
プロキシサーバを経由した場合に REMOTE_ADDR には、プロキシサーバの IP アドレスが 格納されるため、サーバ環境変数(HTTP_CLIENT_IP や TTP_X_FORWARDED_FOR)から クライアント IPアドレスを取得している。
なお、多くのプロキシサーバソフトが HTTP_CLIENT_IP や HTTP_X_FORWARDED_FOR を使用しているために この環境変数から取得しているのであり、すべてのプロキシサーバに対応するわけではない。
また、ヘッダに HTTP_CLIENT_IP などを自前で追加されると、IP アドレスを偽証されてしまうので十分注意・検証すること。
// 指定されたサーバー環境変数を取得する
function getServer($key, $default = null)
{
return (isset($_SERVER[$key])) ? $_SERVER[$key] : $default;
}
// クライアントのIPアドレスを取得する
function getClientIp($checkProxy = true)
{
/*
* プロキシサーバ経由の場合は、プロキシサーバではなく
* 接続もとのIPアドレスを取得するために、サーバ変数
* HTTP_CLIENT_IP および HTTP_X_FORWARDED_FOR を取得する。
*/
if ($checkProxy && getServer('HTTP_CLIENT_IP') != null) {
$ip = getServer('HTTP_CLIENT_IP');
} else if ($checkProxy && getServer('HTTP_X_FORWARDED_FOR') != null) {
$ip = getServer('HTTP_X_FORWARDED_FOR');
} else {
// プロキシサーバ経由でない場合は、REMOTE_ADDR から取得する
$ip = getServer('REMOTE_ADDR');
}
return $ip;
}
echo getClientIp();
Comment