Bonjour
J'ai réparé l'anti-navigateur de mon site.
Voici la fonction fXFgjy7eUzQVMSMtV_address() chargée de calculer l'ip remote brute.
is_reelle_ip($ip) ( ipv4 ou ipv6 ) rend true si $ip n'est ni privée ni réservée ni locale ( celle de mon serveur ), false sinon.
Pourriez-vous me donner des conseils pour l'implémentation de la fonction ci-dessous ?
Par exemple : Quelles sont les variables serveur forgeables à éviter ?
Merci beaucoup de votre side.
Respectueusement.
J'ai réparé l'anti-navigateur de mon site.
Voici la fonction fXFgjy7eUzQVMSMtV_address() chargée de calculer l'ip remote brute.
is_reelle_ip($ip) ( ipv4 ou ipv6 ) rend true si $ip n'est ni privée ni réservée ni locale ( celle de mon serveur ), false sinon.
Pourriez-vous me donner des conseils pour l'implémentation de la fonction ci-dessous ?
Par exemple : Quelles sont les variables serveur forgeables à éviter ?
Merci beaucoup de votre side.
Respectueusement.
PHP:
/**
* Retrieves the best guess of the client's actual IP address.
* Takes into account numerous HTTP proxy headers due to variations
* in how different ISPs handle IP addresses in headers between hops.
*/
function fXFgjy7eUzQVMSMtV_address()
{
// check for shared internet/ISP IP
if(!empty($_SERVER['HTTP_CLIENT_IP']))
{
if(is_reelle_ip($_SERVER['HTTP_CLIENT_IP']))
{
return $_SERVER['HTTP_CLIENT_IP'];
}
}
if (!empty($_SERVER['HTTP_FORWARDED']))
{
if(strpos($_SERVER['HTTP_FORWARDED'], "," ) !== false)
{
$array_ip = explode(",", $_SERVER['HTTP_FORWARDED']);
}
else
{
$array_ip[0] = $_SERVER['HTTP_FORWARDED'];
}
foreach($array_ip as $tmp_ip)
{
$tmp_ip = preg_replace("{[\"' \t]+}", "", $tmp_ip);
if(preg_match("{^for=}i", $tmp_ip))
{
$ip = preg_replace("{^for=}i", "", $tmp_ip);
$ip = preg_replace("{[\"' \t]+}", "", $ip);
if(filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV6) !== false)
{
$ipv6 = correct_ip6(strtolower($ip));
}
elseif(filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4) !== false)
{
$ipv4 = $ip;
}
if((isset($ipv4))&&(is_reelle_ip($ipv4)))
{
return($ipv4);
}
elseif((isset($ipv6))&&(is_reelle_ip($ipv6)))
{
return($ipv6);
}
}
}
}
if (!empty($_SERVER['HTTP_X_FORWARDED']))
{
if(is_reelle_ip($_SERVER['HTTP_X_FORWARDED']))
{
return $_SERVER['HTTP_X_FORWARDED'];
}
}
// check for IPs passing through proxies
if(!empty($_SERVER['HTTP_X_FORWARDED_FOR']))
{
// check if multiple ips exist in var
if(strpos($_SERVER['HTTP_X_FORWARDED_FOR'], "," ) !== false)
{
$iplist = explode(",", $_SERVER['HTTP_X_FORWARDED_FOR']);
}
else
{
$iplist[0] = $_SERVER['HTTP_X_FORWARDED_FOR'];
}
foreach ($iplist as $ip)
{
if (is_reelle_ip($ip))
{
return $ip;
}
}
}
if(!empty($_SERVER['HTTP_X_CLUSTER_CLIENT_IP']))
{
if(is_reelle_ip($_SERVER['HTTP_X_CLUSTER_CLIENT_IP']))
{
return $_SERVER['HTTP_X_CLUSTER_CLIENT_IP'];
}
}
if (!empty($_SERVER['HTTP_FORWARDED_FOR']))
{
if(is_reelle_ip($_SERVER['HTTP_FORWARDED_FOR']))
{
return $_SERVER['HTTP_FORWARDED_FOR'];
}
}
if (!empty($_SERVER['REMOTE_ADDR']))
{
if(is_reelle_ip($_SERVER['REMOTE_ADDR']))
{
return $_SERVER['REMOTE_ADDR'];
}
}
return(false);
}