今天我遇到了一個非常奇怪的基於PHP的應用程序的行爲。 在系統的某個部分,有一個UI使用AJAX調用來填充包含來自後端內容的列表 框。php/ajax REMOTE_ADDR設置爲IP僞造網絡適配器
現在,AJAX偵聽器對所有傳入請求執行安全檢查,確保 只有有效的客戶端IP才能獲得響應。有效的IP也存儲在後端。
獲取客戶端的IP我用普通的老式
$_SERVER['REMOTE_ADDR']
能夠統計出的大部分客戶。今天我遇到了一個安裝,其中 remote_addr包含一個網絡適配器的IP,該網絡適配器不是執行我的應用程序的實際通信的那個IP。
周圍的Googling agve我Roshan's Blog entry on the topuic:
function getRealIpAddr()
{
if (!empty($_SERVER['HTTP_CLIENT_IP'])) //check ip from share internet
{
$ip=$_SERVER['HTTP_CLIENT_IP'];
}
elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR']))//check ip is pass from prxy
{
$ip=$_SERVER['HTTP_X_FORWARDED_FOR'];
}
else
{
$ip=$_SERVER['REMOTE_ADDR'];
}
return $ip;
}
可悲的是問題仍然存在。
有沒有人偶然遇到過這樣的問題(其實我不認爲我發現了一個完整的新問題^^)並對我有一個想法如何解決這個問題?
編輯:
我在
- PHP版本5.2.9-1
- 的Apache/2.2.9(Win32的)
通信完成通過普通的LAN卡。現在真正的客戶端有更多的幾個 設備。 VMNet適配器等。
我想知道如何在客戶端配置可以「打擾」的web服務器那麼多......
TIA
ķ
你可以在這裏提供一些關於採用者和運行應用程序的服務器的細節..我的意思是他們持有哪些IP。 – 2009-11-04 10:19:19
請看到我的另外 – KB22 2009-11-04 10:25:53
所以示例場景看起來像這樣的客戶端: eth0的 - 10.0.0.1 的eth1 - 10.1.1.1 然後在服務器u有10.1.1.2,當請求從客戶端經過,而不是10.1 .1.1它顯示10.0.0.1? – 2009-11-04 11:02:11