사용자의 IP 주소를 결정하는 간단한 스크립트가 있습니다.
function GetIp(){
if (!empty($_SERVER['HTTP_CLIENT_IP']))
//check ip from share internet
{
$ip=$_SERVER['HTTP_CLIENT_IP'];
}
elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR']))
//to check ip is pass from proxy
{
$ip=$_SERVER['HTTP_X_FORWARDED_FOR'];
}
else
{
$ip=$_SERVER['REMOTE_ADDR'];
}
return $ip;
}
이제 어딘가에서이 스크립트를 사용하는 사람을 보았습니다.
if (isset($_SERVER['HTTP_CLIENT_IP']) && $_SERVER['HTTP_CLIENT_IP'] != '')
$Ip = $_SERVER['HTTP_CLIENT_IP'];
elseif (isset($_SERVER['HTTP_X_FORWARDED_FOR']) && $_SERVER['HTTP_X_FORWARDED_FOR'] != '')
$Ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
elseif (isset($_SERVER['REMOTE_ADDR']) && $_SERVER['REMOTE_ADDR'] != '')
$Ip = $_SERVER['REMOTE_ADDR'];
내 구현이 손상되었는지 궁금합니다. $_SERVER['HTTP_CLIENT_IP']
, $_SERVER['HTTP_X_FORWARDED_FOR']
또는 $_SERVER['REMOTE_ADDR']
값이 비어 있는지 확인해야합니까? 아니면 그렇게 할 필요가 실제로 있습니까?
이 기능의 목적은 무엇입니까? 어떤면에서 보안과 관련이 있습니까? Beacause 인 경우 'REMOTE_ADDR'만 보람있는 것입니다. –
에 따라 다름. 나는 그들의 서버 앞에서 프록시를 가지고있는 몇몇 호스팅 회사를 기억하고 있는데 그들은'REMOTE_ADDR'을 항상 '10.0.0.1'과 같은 프록시가되는 * local * IP로 밀어 넣습니다. 그래서 당신이 원한다면 'X_FORWARDED_FOR'와 함께 가야하는 클라이언트 IP를 얻으십시오. – klaustopher