이 누리집은 대한민국 공식 전자정부 누리집입니다.
오*영
2013-05-28 17:56:25
3,014
공통컴포넌트
완료
안녕하세요.
현재 전자정부프레임워크를로 개발된 시스템 운영을 하고 있습니다.
얼마전 보안취약점이 발견되어 이를 어떻게 조치를 해야 자문을 구하고 싶습니다.
로그인시에 아래 부분를 사용하고 있는데,
패킷 캡쳐 프로그램을 이용하면
/j_spring_security_check?j_username=OOOOOO&j_password=xxxxxx
처럼 username과, password 값이 평문으로 보입니다.
이를 암호화문으로 적용하려면 어떻게 하나요?
그럼, 답변 기다리겠습니다.
수고하세요.
안녕하세요. 오민영님.
우선 웹 상에서 ID/Password를 입력하는 방식의 경우는 위와 같이 GET이든 POST든 패킷 캡쳐 프로그램으로 보면 평문의 데이터가 전송되도록 되어 있습니다.
원칙적으로 막을 수 있는 방법은 SSL(HTTPS)를 적용하여 외부에서 캡쳐가 되더라도 암호화되어 있도록 조치하는 방법을 사용하셔야 합니다.
추가적으로 요청하신 것 처럼 SSL이 아닌 데이터를 암호화하시려면 별도의 웹구간 암호화 솔루션이 필요합니다.
마지막으로, 현재 공통컴포넌트 내부에서 /j_spring_security_check?j_username=OOOOOO&j_password=xxxxxx 로 처리 되는 부분을 secure filter chain 방식으로 변경해 배포되고 있습니다.
하단 조치 내용 또는 현재 배포본 2.0.X 참조
//스프링 시큐리티 로그인
//httpResponse.sendRedirect(httpRequest.getContextPath() + "/j_spring_security_check?j_username=" + loginVO.getUserSe() + loginVO.getId() + "&j_password=" + loginVO.getUniqId());
AuthenticationProcessingFilter springSecurity = null;
@SuppressWarnings("rawtypes")
Map beans = act.getBeansOfType(AuthenticationProcessingFilter.class);
if (beans.size() > 0) {
springSecurity = (AuthenticationProcessingFilter)beans.values().toArray()[0];
} else {
LOG.error("No AuthenticationProcessingFilter");
throw new IllegalStateException("No AuthenticationProcessingFilter");
}
//springSecurity.setContinueChainBeforeSuccessfulAuthentication(false); // false 이면 chain 처리 되지 않음.. (filter가 아닌 경우 false로...)
LOG.debug("before security filter call....");
springSecurity.doFilter(
new RequestWrapperForSecurity(httpRequest, loginVO.getUserSe() + loginVO.getId(), loginVO.getUniqId()),
httpResponse, chain);
LOG.debug("after security filter call....");
그럼, 즐거운 하루되십시오.
감사합니다.