* 시큐어 코딩이란?
- 소프트웨어 개발 과정에서 개발자의 실수, 논리적 오류 등으로 인한 보안약점을 최소화하기 위한 개발 기법이다.
보통 개발 후 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;
}
}
/* 출처 : 행정안전부 */
'Java' 카테고리의 다른 글
Java Collection Framework (2) (0) | 2024.06.18 |
---|---|
Java Collection Framework (1) (2) | 2024.06.17 |
람다식 (Lambda Expression) (0) | 2024.06.14 |
[시큐어코딩] 부적절한 자원 해제(IO) (0) | 2023.02.06 |
[SpringBoot] 프로젝트 Tomcat 서버에 배포하기 (Maven) (0) | 2023.01.27 |