본문 바로가기

Java

[시큐어 코딩] 부적절한 예외 처리 (광범위한 예외 객체 선언 및 사용)

* 시큐어 코딩이란?

    - 소프트웨어 개발 과정에서 개발자의 실수, 논리적 오류 등으로 인한 보안약점을 최소화하기 위한 개발 기법이다.

 

보통 개발 후 code-ray와 같은 보안 프로그램을 돌리는데

이 때 행정안전부의 'JAVA 시큐어 코딩 가이드' 를 참고하면 큰 도움을 받을 수 있다!

https://www.kisa.or.kr/2060204/form?postSeq=6&page=1#fnPostAttachDownload

개발한 코드가 어떠한 경우에 보안약점이 될 수 있는지와 안전하지 않은 코드, 안전한 코드 예시까지 들어주기 때문이다.

(유료 보안 프로그램의 경우 결과 보고서에 쓰여있긴 하다.)

 

내가 처리한 부분은 아래와 같다.

 

4.1 오류 메시지를 통한 정보 노출

    - 발생하는 경우

        System.out.println("Error Name"); 또는 e.getMessage() 사용하는 경우

    - 수정 방법

        logger.error("Error Name");

 

4.2 오류 상황 대응 부재

    - 발생하는 경우

        예외 처리 시 비워놓는 경우 (catch 문 안에 아무런 코드도 작성하지 않은 경우)

    - 수정 방법

        4.1과 같이 오류 메시지를 남긴다.

 

4.3 적절하지 않은 예외처리 (광범위한 예외 객체 선언 및 사용)

    - 발생하는 경우

        Exception으로 광범위하게 예외를 잡아 처리하는 경우

    - 수정 방법

        구체적인 예외(IOException, NullPointerException 등)를 잡아서 처리한다.

        구체적인 예외가 많을 경우 catch 문 중첩하여 모두 별개로 처리한다.

    * 예외가 Exception 으로만 잡히는 경우는 사용하는 함수가 Exception으로 예외 처리한 경우이므로 모두 수정하면 된다.

 

@Controller
@RequestMapping(value = "/list")
public class ListController {

	private static final Logger logger = LoggerFactory.getLogger(ListController.class);
	
	@Resource(name = "listService")
	private ListService listService;
	
	@RequestMapping(value = "/getList.do", produces = "application/json; charset=UTF-8", method = RequestMethod.POST)
	@ResponseBody
	public Map<String, Object> getList(@RequestParam Map<String, Object> param, HttpServletRequest request) {
		
		Map<String, Object> result = new LinkedHashMap<String, Object>();
		
		try {
			
			List<Map<String, Object>> list = listService.getList(param);
			
			result.put("SUCCESS", true);
			result.put("RESULT", arBase);
			
		} catch (NullPointerException e) {
        
			result.put("SUCCESS", false);
			
            		/* 안전하지 않은 코드 */
            		/* System.out.println("NullPointerException Occured"); */
			/* logger.error("ERROR:{}", e.getMessage()); */
            
            		/* 안전한 코드 */
			logger.error("NullPointerException Occured");
            
		} catch (IllegalArgumentException e) {
			result.put("SUCCESS", false);
			logger.error("IllegalArgumentException Occured");
		}
		
		return result;
        
	}
	
}

 

/* 출처 : 행정안전부 */

728x90