Request.ServerVariables(“REMOTE_ADDR”)与Request.ServerVariables(“HTTP_X_FORWARDED_FOR”)的安全隐患
问题描述:
比方说,我们正在跟踪最终用户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服务?
在此先感谢您的帮助。
答
REMOTE_ADDR
由Web服务器根据客户端的连接生成。 HTTP_X_FORWARDED_FOR
基于客户端发送的HTTP头。
您不能信任来自客户端的输入,特别是容易被伪造的输入,例如HTTP标头。客户可以将任何东西转换成HTTP_X_FORWARDED_FOR
标题。
答
如果用户使用的是透明代理,那么上面的代码会得到真正的IP地址。如果他们使用匿名代理,但是(如Anonymizer)那么真的没有办法获得用户的真实IP地址。