今天我遇到了一个非常奇怪的基于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