Java - IPCheck

IP Check

client의 ip체크 시 아래와 같이 체크 하였으나 최근 새로운 고객사와 연동을 하며 ip체크가 제대로 되지 않는 현상이 확인되어 로그를 확인한 결과 IP가 , 콤마로 구분하여 두개가 들어오고 있었다.

String ip = request.getHeader("X-Forwarded-For");
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { 
	ip = request.getHeader("Proxy-Client-IP"); 
} 
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { 
	ip = request.getHeader("WL-Proxy-Client-IP"); 
} 
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { 
	ip = request.getHeader("HTTP_CLIENT_IP"); 
} 
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { 
	ip = request.getHeader("HTTP_X_FORWARDED_FOR"); 
} 
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { 
	ip = request.getHeader("X-Real-IP"); 
} 
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { 
	ip = request.getRemoteAddr(); 
}

검색하여 확인 해 보니 X-Forwarded-For 의 경우 앞의 ip가 실제 client ip이고, 뒤에 오는 ip는 프록시의 ip들이 차례로 열거 된다고 한다.

X-Forwarded-For: , ,

고객사에서 사용하는 실제 ip는 두번째 ip였으나 다른 고객사에서 동일하게 복수 ip로 들어 올 경우 하나라도 등록 되어있으면 통과하도록 수정 (추후 보완해야 할 것 같음.)

	if(url.contains(",")) {	// X-Forwarded-For인 경우 ip가 복수로 들어오는 경우 존재
		String[] url_arr = url.split(",");
		List<String> checkipList = Arrays.asList(checkIp_arr);
		for(int i=0;i<url_arr.length;i++){
			if(checkipList.contains(url_arr[i].trim())){
				result = true;
				break;
			}
		}
	}

태그: ,

카테고리:

업데이트:

댓글남기기