%@page import="org.apache.commons.httpclient.MultiThreadedHttpConnectionManager"%> <%@page import="org.apache.commons.httpclient.methods.PostMethod"%> <%@page import="org.apache.commons.httpclient.HttpClient"%> <%@page errorPage="error.jsp" %> <% String AUTHORIZATION_URL = session.getAttribute("AUTHORIZATION_URL") == null ? "" : session.getAttribute("AUTHORIZATION_URL").toString(); String AUTHORIZATION_SSL_URL = session.getAttribute("AUTHORIZATION_SSL_URL") == null ? "" : session.getAttribute("AUTHORIZATION_SSL_URL").toString(); String SSID = session.getAttribute("SSID") == null ? "" : session.getAttribute("SSID").toString(); System.out.println("@@@@@@parameter SSID@@@@@@ : " +SSID); /* 예외 처리 -> 인증서버 url에 값이 없다면 index 및 business 페이지로 send */ String SERVICE_BUSINESS_PAGE = session.getAttribute("SERVICE_BUSINESS_PAGE") == null ? "/index.jsp" : session.getAttribute("SERVICE_BUSINESS_PAGE").toString(); if(AUTHORIZATION_URL.length() < 5){ response.sendRedirect(SERVICE_BUSINESS_PAGE); return; } /* 예외 처리 */ //CSRF(Cross-Site Request Forgery) 방어코드 //head 의 referer 값이 http://domain:port/sso/business.jsp 인지 비교. //설치하는 서버에 맞게 수정. //등록되어 있는 서버 목록을 통해서 접속하는 것만을 허용함. //business.jsp 에서 접근하는 것을 생각해 볼수 있으나, logout.jsp에서도 동일한 코드로 방어를 하기 위해서 //whitelist 방식으로 작성함. //logout.jsp 일 경우 통합로그아웃으로 통해서 인증서버에서 logout 요청이 들어올수도 있기 때문에, 접근 페이지 비교를 하지 않음. //String serverWhiteList[] = {"192.168.1.14", "192.168.254.10","sso.pola.or.kr","인증서버"}; String serverWhiteList[] = {"192.168.1.14", "192.168.254.10", "인증서버" , "itsm.pola.or.kr"}; String referer = request.getHeader("referer"); if(referer != null){ // referer 에서 http:// 또는 https:// 제거 int index = referer.indexOf("://") + 3; referer = referer.substring(index, referer.length()); // 도메인을 제외한 포트 및 서브 주소 제거. index = referer.indexOf(":"); if(index > 0) referer = referer.substring(0, index); index = referer.indexOf("/"); if(index > 0) referer = referer.substring(0, index); boolean checkReferer = false; for(String serverName : serverWhiteList){ if(referer.equals(serverName)){ checkReferer = true; } } if(checkReferer == false){ out.println("