我正在努力寻找客户的IP。我被告知' request.getHeader(" HTTP_X_FORWARDED_FOR")'不可信任,因为它可能是伪造的,我应该使用request.getRemoteAddr。(在我的情况下,只需获取代理的IP就可以了) 所以我的问题是:
为什么不能伪造ServletRequest.getRemoteAddr?
另一个问题: 什么是HTTP_X_FORWARDED_FOR和X_FORWARDED_FOR之间的区别?
答案 0 :(得分:1)
如果你request.getRemoteAddr();
如果用户位于代理服务器后面或通过负载均衡器访问您的Web服务器,则上述代码将获取代理服务器或负载均衡器服务器的IP地址,而不是客户端的原始IP地址。
所以,如果
在我的情况下,只需获取代理的IP
即可
你没关系,然后是request.getRemoteAddr();就够了。
但在理想情况下你应该试试这个
//is client behind something?
String ipAddress = request.getHeader("X-FORWARDED-FOR");
if (ipAddress == null) {
ipAddress = request.getRemoteAddr();
}
<强> X_FORWARDED_FOR 强>
X-Forwarded-For(XFF)HTTP头字段是用于识别通过HTTP代理或负载平衡器连接到Web服务器的客户端的原始IP地址的事实标准。
<强> HTTP_X_FORWARDED_FOR 强>
标头HTTP_X_FORWARDED_FOR由代理服务器设置,用于标识通过代理发出HTTP请求的主机的IP地址。
简而言之,它们都是相同的标题,各种实现的方式不同。有关详细信息,请参阅:HTTP Headers: What is the difference between X-FORWARDED-FOR, X_FORWARDED_FOR and HTTP_X_FORWARDED_FOR?