티스토리 뷰

WEB

Proxy환경에서 Client IP 가져오기

snail voyager 2020. 3. 20. 23:28
728x90
반응형

X-Forwarded-For (XFF) 헤더는 HTTP 프록시나 로드 밸런서를 통해 웹 서버에 접속하는 클라이언트의 원 IP 주소를 식별하는 사실상의 표준 헤더다. 클라이언트와 서버 중간에서 트래픽이 프록시나 로드 밸런서를 거치면, 서버 접근 로그에는 프록시나 로드 밸런서의 IP 주소만을 담고 있다. 클라이언트의 원 IP 주소를 보기위해 X-Forwarded-For 요청 헤더가 사용된다.

 

이 헤더는 디버깅, 통계, 그리고 위치 종속적인 컨텐츠를 위해 사용되고, 클라이언트의 IP 주소 등과 같은 민감한 개인정보를 노출시킨다. 그러므로 이 헤더를 사용할 때에는 사용자의 프라이버시를 주의해야 한다.

 

https://developer.mozilla.org/ko/docs/Web/HTTP/Headers/X-Forwarded-For

 

X-Forwarded-For

X-Forwarded-For (XFF) 헤더는 HTTP 프록시나 로드 밸런서를 통해 웹 서버에 접속하는 클라이언트의 원 IP 주소를 식별하는 사실상의 표준 헤더다. 클라이언트와 서버 중간에서 트래픽이 프록시나 로드 밸런서를 거치면, 서버 접근 로그에는 프록시나 로드 밸런서의 IP 주소만을 담고 있다. 클라이언트의 원 IP 주소를 보기위해 X-Forwarded-For 요청 헤더가 사용된다.

developer.mozilla.org

 

WAS 서버나 L4 Switch, Proxy 장비마다 Header정보가 다를 수 있으므로 아래와 같이 Util 소스에서 처리한다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
public Object getClientIp(HttpServletRequest request) throws Exception {
 
    String clientIp = request.getHeader("X-Forwarded-For");
    if (StringUtils.isEmpty(clientIp)|| "unknown".equalsIgnoreCase(clientIp)) {
        clientIp = request.getHeader("Proxy-Client-IP");
    }
    if (StringUtils.isEmpty(clientIp) || "unknown".equalsIgnoreCase(clientIp)) {
        clientIp = request.getHeader("WL-Proxy-Client-IP");
    }
    if (StringUtils.isEmpty(clientIp) || "unknown".equalsIgnoreCase(clientIp)) {
        clientIp = request.getHeader("HTTP_CLIENT_IP");
    }
    if (StringUtils.isEmpty(clientIp) || "unknown".equalsIgnoreCase(clientIp)) {
        clientIp = request.getHeader("HTTP_X_FORWARDED_FOR");
    }
    if (StringUtils.isEmpty(clientIp) || "unknown".equalsIgnoreCase(clientIp)) {
        clientIp = request.getRemoteAddr();
    }
 
    return clientIp;
}
 

 

 

728x90
반응형

'WEB' 카테고리의 다른 글

JSON vs XML  (0) 2020.05.11
WBS (Work Breakdown structure)  (0) 2020.04.10
MSA (Micro Service Architecture)  (0) 2018.08.26
REST API  (0) 2018.08.05
PowerBuilder  (0) 2016.05.08
반응형
300x250