2017-03-23 61 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