2012-06-08 81 views
1

兩部分問題。查找真實IP地址

首先,當我嘗試在隱藏的輸入字段中回顯IP地址時,表單停止提交。我有jQuery來驗證一些輸入,當IP地址出現在該字段時,它全部停止。

其次我得到的IP地址不是我在終端登記時找到的地址。爲什麼我的網站,通過Godaddy託管,顯示看起來像代理IP而不是我的機器IP?

這是我正在使用的代碼。

function ipCheck() { 
    if (getenv('HTTP_CLIENT_IP')) { 
     $ip = getenv('HTTP_CLIENT_IP'); 
    } 
    elseif (getenv('HTTP_X_FORWARDED_FOR')) { 
     $ip = getenv('HTTP_X_FORWARDED_FOR'); 
    } 
    elseif (getenv('HTTP_X_FORWARDED')) { 
     $ip = getenv('HTTP_X_FORWARDED'); 
    } 
    elseif (getenv('HTTP_FORWARDED_FOR')) { 
     $ip = getenv('HTTP_FORWARDED_FOR'); 
    } 
    elseif (getenv('HTTP_FORWARDED')) { 
     $ip = getenv('HTTP_FORWARDED'); 
    } 
    else { 
     $ip = $_SERVER['REMOTE_ADDR']; 
    } 
    //$ip = str_replace('.','', $ip); 
    return $ip; 
} 
+0

因爲你在代理的背後?因爲你的網關正在使用NAT? –

+0

我們可能需要更多信息來回答第一個問題。例如,IP地址所在字段的HTML,填充方式以及驗證方式。 – andrewsi

+0

我的朋友,您的機器在本地網絡中的IP不等於您路由器的IP(當您瀏覽Internet時使用)。 –

回答

2

您的代碼允許任何調用者指定他們想要的任何IP地址(又名IP欺騙)。

所有攻擊者必須做的是使用添加的HTTP標頭(如X-Forwarded-For: 123.123.123.123)發出請求。

此代碼降低您的安全性,我可以假裝我是本地主機(127.0.0.1)或「聖誕老人條款」,因爲這些值未驗證包含實際的IP地址。

另請注意,例如,X-Forwarded-For HTTP標頭可以包含多個IP地址,而不僅僅是一個(以逗號分隔)。

$_SERVER['REMOTE_ADDR']是您唯一的選擇。

+0

謝謝。我注意到,我的IP是作爲Quest分配的,而不是我在ifconfig中看到的。這是由於我的本地IP不是路由器IP。它可以阻止htacccess中的用戶,但是如果他們改變了路由器,它不會阻止他們。謝謝您的幫助。越安全越好。 –

+0

關於'$ _SERVER ['REMOTE_ADDR']'的有用Q/A:http://stackoverflow.com/q/4773969/186636 –