우리 서비스에서 다른 웹페이지로 이동하는 기능이 있는데
로그인 정보도 같이 가지고 넘어감.
그래서 우리 서비스에서 비밀번호를 변경하면 타 서비스에 저장된 개인정보도 수정되어야함.
그 때 쓰는 메서드의 일부.
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을 잡는 방식으로 개선함
반응형
'Chapter01 > Sping boot' 카테고리의 다른 글
[ Spring Boot ] J2EE와의 관계 (0) | 2025.01.08 |
---|---|
[ Springboot ] final (0) | 2024.12.28 |
[ 보안 취약점 ] 적절하지 않은 난수 값 사용 Math.random() (2) | 2024.12.27 |
[node] 노드 버전 여러 개 사용하기 (5) | 2024.12.09 |
[ swagger ] Failed to load remote configuration. (0) | 2024.12.06 |