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;
}
}
}
댓글남기기