今天我遇到了我的一个基于PHP的应用程序的一个非常奇怪的行为。
在系统的某一部分中,有一个UI使用Ajax调用来填充列表。
包含后端内容的框。
现在,Ajax侦听器对所有传入的请求执行安全检查,确保
只有有效的客户端IP才能得到响应。有效的IP也存储在后端。
为了得到客户的IP,我使用了纯旧的
$_SERVER['REMOTE_ADDR']
这对大多数客户都适用。今天我碰到一个装置
远程地址包含网络适配器的IP,而不是执行该网络适配器的IP
我的应用程序的实际通信。
咕噜咕噜地找我
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)
通信是通过一个普通的局域网卡完成的。现在,actuall客户机有几个
设备更多。vmnet适配器等。
我想知道一个客户机配置如何“干扰”一个Web服务器那么多…
蒂亚
K