Chapter01/Sping boot

[ 보안 취약점 ] 부적절한 예외 처리 catch(Exception e)

EmmaDev_v 2024. 12. 27. 15:12

 

 

우리 서비스에서 다른 웹페이지로 이동하는 기능이 있는데

로그인 정보도 같이 가지고 넘어감.

그래서 우리 서비스에서 비밀번호를 변경하면 타 서비스에 저장된 개인정보도 수정되어야함.

그 때 쓰는 메서드의 일부.

 

 

private void updatePassword(User user,String userId, String password){

        String usingService = (subscribeMapper.checkUserService(userId)).getId();
        if (usingService != null) {
            try{
               appleService.putPasswd(userId, user.getPassword(), usingService);
            }catch(Exception e){
            }
        }
    }

위 코드에서 이런 취약점 분석 진단을 받았다. 

 

 

- 너무 다양한 예외를 포괄적으로 처리하는 코드를 검출.

 

- 지나치게 일반적인 예외 처리를 하게 되면 특별히 처리해야하는 개별 예외를 적절히 처리하지 못할 뿐 아니라

이 지점에서 논리적으로 발생해서는 안되는 예외까지 처리하게됩니다.

이러한 경우에 개발 및 검수 과정에서 발견되었어야하는 설계 및 구현상 결함이 발견되지 못한 채

배포 단계로 넘어가서 더 큰 문제의 원인이 될 수 있습니다.

해당 코드 구역에서 발생할 수 있는 세부적인 예외들을 명시적으로 나눠서 처리하는 것이 좋습니다.

 

- 일반적인 예외를 처리하더라도 예측 가능한세부적인 예외들을 먼저 처리한 후 마지막에 처리하도록 합니다.

이렇게 작성했을 때 실행 흐름이 일반적인 예외 처리 부분에 도달했다면

개발 과정에서 예측하지 못한 예외가 발생한 것이므로 조용히 넘어가지 않고 상황에 대한 상세한 기록을 남겨서

추후 결함을 수정 할 수 있도록 합니다.

 

 

catch문 부분을 수정해야함

 

 

    private void updatePassword(User user, String userId, String password) {
        String usingService = subscribeServiceMapper.checkUserService(userId).getId();
        if (usingService != null) {
            try {
                appleService.putPasswd(userId, user.getPassword(), usingService);
            } catch (IOException e) {
                logger.error("IOException occurred while updating the password: {}", e.getMessage(), e);
            } catch (HttpClientErrorException | HttpServerErrorException e) {
                logger.error("HTTP error occurred while updating the password: {} - {}", e.getStatusCode(), e.getMessage(), e);
            } catch (Exception e) {
                logger.error("Unexpected error occurred while updating the password: {}", e.getMessage(), e);
            }
        }
    }

 

 

포괄적으로 처리하고 있던 예외처리를, 발생 가능한 구체적인 예외를 명시적으로 처리한 후, 마지막에 Exception을 잡는 방식으로 개선함

 

 

반응형