IgnatiusHeo

구현단계 보안약점 제거 기준-부적절한 예외 처리 본문

자격/SW보안약점진단원

구현단계 보안약점 제거 기준-부적절한 예외 처리

Ignatius Heo 2023. 7. 6. 14:21

작성일: 230706

 

※ 본 게시글은 학습 목적으로 행정안전부·KISA의 소프트웨어 보안약점 진단 가이드, 소프트웨어 개발보안 가이드를 참고하여 작성하였습니다.

 

정리 내용: 소프트웨어 보안약점 진단 가이드(429~432p)

구분 - 에러처리
설계단계  
개요 프로그램 수행 중에 함수의 결과값에 대한 적절한 처리 또는 예외상황에 대한 조건을 적절하게 검사하지 않을 경우, 예기치 않은 문제를 야기할 수 있다.
진단 세부사항
(설계단계)
 
보안대책
(구현단계)
값을 반환하는 모든 함수의 결과값을 검사하여, 그 값이 의도했던 값인지 검사하고, 예외 처리를 사용하는 경우에 광범위한 예외 처리 대신 구체적인 예외 처리를 수행한다.
진단방법
(구현단계)
함수 또는 메소드에 대하여 반환값을 검사하고 예외를 발생시키는 경우 구체적인 예외처리를 수행하는지 확인한다.

 

다. 코드예제

 

ㅇ 분석

1: try {
2: ...
3: reader = new BufferedReader(new InputStreamReader(url.openStream()));
4: String line = reader.readLine();
5: SimpleDateFormat format = new SimpleDateFormat("MM/DD/YY");
6: Date date = format.parse(line);
//예외처리를 세분화 할 수 있음에도 광범위하게 사용하여 예기치 않은 문제가 발생 할 수 있다.
7: } catch (Exception e) {
8: System.err.println("Exception : " + e.getMessage());
9: }

ㅇ 내용

1. 각 기능 별 exception을 사용해서 예외처리를 만들어야 됨

 

ㅇ 수정

1: try {
2: ...
3: reader = new BufferedReader(new InputStreamReader(url.openStream()));
4: String line = reader.readLine();
5: SimpleDateFormat format = new SimpleDateFormat("MM/DD/YY");
6: Date date = format.parse(line);
// 발생할 수 있는 오류의 종류와 순서에 맞춰서 예외 처리 한다.
7: } catch (MalformedURLException e) {
8: System.err.println("MalformedURLException : " + e.getMessage());
9: } catch (IOException e) {
10: System.err.println("IOException : " + e.getMessage());
11: } catch (ParseException e) {
12: System.err.println("ParseException : " + e.getMessage());
13: }

ㅇ 내용


ㅇ 분석

1: try {
2: InvokeMtd();
//예외처리를 세분화 할 수 있음에도 광범위하게 사용하여 예기치 않은 문제가 발생 할 수 있다.
3: } catch (Exception e) {
4: }

ㅇ 내용

1. 이건 어떻게..? 인보크쪽에서 뭐가 나올지 알고?

 

ㅇ 수정

1: try {
2: InvokeMtd();
// 발생할 수 있는 오류의 종류와 순서에 맞춰서 예외 처리 한다.
3: } catch (IOException e) {
4: logger.Debug(“IOException log here”);
5: } catch (SQLException e){
6: logger.Debug(“SQLException log here”);
7: }

ㅇ 내용

 

 

 

끝.