2017-03-23 60 views
0

我有,当我试图解析访问者IP,问题五百分之一用户有一个坏的IP,你可以在日志中看到。
有人可以向我解释,如果我在我的代码中犯了一个错误?不常见的IP地址

我的代码:

if (!empty($_SERVER['HTTP_CLIENT_IP'])) { 
    $ip = $_SERVER['HTTP_CLIENT_IP']; 
} else if (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) { 
    $ip = $_SERVER['HTTP_X_FORWARDED_FOR']; 
} else { 
    $ip = $_SERVER['REMOTE_ADDR']; 
} 

$ip = str_replace(' ','', $ip); 

if(filter_var($ip, FILTER_VALIDATE_IP) === false){ 
    Log::error('IP : '.$ip); 
    return Redirect::to($link->white_url, 301); 
} 

日志:

[2017-03-23 16:36:15] production.ERROR: IP : 192.168.5.173,sams04818.orl,sams04818.orl 
[2017-03-23 16:36:30] production.ERROR: IP : 192.168.5.173,sams04818.orl,sams04818.orl 
[2017-03-23 16:37:15] production.ERROR: IP : 192.168.4.217,wmt03459.chi,wmt03459.chi 
[2017-03-23 16:39:01] production.ERROR: IP : 77.154.224.155,77.154.224.155 
[2017-03-23 17:31:03] production.ERROR: IP : 192.168.5.80,mcd03610.phx,mcd03610.phx 
[2017-03-23 17:09:09] production.ERROR: IP : 92.90.16.110,92.90.16.110 
+1

@AbraCadaver'192.168.5.173,sams04818.orl,sams04818.orl'是一个糟糕的IP,它包含了IP后,多余的文字。 – Barmar

+0

您是否正在运行您自己的反向代理或负载均衡器?否则,您不能相信“X-Forwarded-For”或“Client-IP”这样的标题。 – Barmar

+0

我可以有解释而不是投票吗? ... – Pixel

回答

2

的X转发,对于(XFF)报头将包含多个IP地址,如果客户端请求已经通过多个通过代理。 XFF通常也被负载平衡器使用。

但是,字符串中的第一个IP地址属于原点。你可以提取它。

if(strpos($ip,',')) 
    $ip = substr($ip, 0, strpos($ip,',')); 

参考:https://en.wikipedia.org/wiki/X-Forwarded-For#Format

+1

好的答案,但用'$ ip = strstr(“$ ip,”,“,”,true)替换所有的代码;'' – AbraCadaver