2008-11-25 71 views
3

比方说,我们正在跟踪最终用户IP的网络服务:Request.ServerVariables(“REMOTE_ADDR”)与Request.ServerVariables(“HTTP_X_FORWARDED_FOR”)的安全隐患

ip = Request.ServerVariables("HTTP_X_FORWARDED_FOR") 
If ip = "" Then 
    ip = Request.ServerVariables("REMOTE_ADDR") 
End If 

我读过这是检索最终用户IP的最佳方法,因为它甚至适用于透明代理上的用户。

如果我们使用最终用户IP地址来过滤恶意用户,那么上述方法是否存在安全隐患,而不是使用Request.ServerVariables(“REMOTE_ADDR”)?

例如,如果我们通过最终用户IP来禁止恶意用户,他们是否可以通过代理轻松更改IP并继续使用我们的Web服务?

在此先感谢您的帮助。

回答

9

REMOTE_ADDR由Web服务器根据客户端的连接生成。 HTTP_X_FORWARDED_FOR基于客户端发送的HTTP头。

您不能信任来自客户端的输入,特别是容易被伪造的输入,例如HTTP标头。客户可以将任何东西转换成HTTP_X_FORWARDED_FOR标题。

0

如果用户使用的是透明代理,那么上面的代码会得到真正的IP地址。如果他们使用匿名代理,但是(如Anonymizer)那么真的没有办法获得用户的真实IP地址。

相关问题