https://issues.apache.org/bugzilla/show_bug.cgi?id=56181
Bug ID: 56181
Summary: RemoteIpValve & RemoteIpFilter:
HttpServletRequest.getRemoteHost() returns IP instead
of hostname with enableLookups=true and
x-forwarded-for header
Product: Tomcat 7
Version: 7.0.52
Hardware: All
OS: All
Status: NEW
Severity: normal
Priority: P2
Component: Catalina
Assignee: [email protected]
Reporter: [email protected]
When clients connect to Tomcat through a proxy or load balancer that adds a
remoteIpHeader (eg. "x-forwarded-for") and the attribute "enableLookups" is set
to "true", the expected behavior is that hostname of the clients is resolved by
Tomcat.
However it is not, if the method getRemoteHost() is called on a
HttpServletRequest object, the IP is always returned, not the hostname.
In the classes org.apache.catalina.valves.RemoteIpValve and
org.apache.catalina.filters.RemoteIpFilter we see that the IP is set to the
Hostname field without any option to do the reverse DNS lookup:
request.setRemoteAddr(remoteIp);
request.setRemoteHost(remoteIp);
Instead the pseudo code could be something like:
request.setRemoteAddr(remoteIp);
if(enableRemoteIpLookups == true){
request.setRemoteHost(InetAddress.getByName(remoteIp).getHostName());
}
Perhaps, instead of using "enableLookups" to indicate the reverse DNS lookup
wants to be done for requests passing through a proxy it should be better to
have a new Tomcat attribute for this (like enableRemoteIpLookups), because
perhaps you do not want to lookups of the proxies IP but just the remoteIp
(x-forwarded-for).
Note, this issue applies also to Tomcat 8.
--
You are receiving this mail because:
You are the assignee for the bug.
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]