우리 프로젝트는 Fortify를 사용하여 코드를 스캔합니다. 코드를 검사 한 후에는 HttpServletResponse가 오류 메시지를 직접 작성하므로 감사 문제가 있습니다.Fortify에서 println()을 호출하여 시스템 데이터 또는 디버깅 정보를 표시하는 방법
response.getWriter().println(e.getLocalizedMessage());
다음은이 문제에 대한 설명입니다.
추상 :
함수 processNonPersistenceException() Utility.java에서이 라인 86에 println에 의해 공개 된 정보에에 println()를 호출하여 시스템 데이터 또는 디버깅 정보를 공개 할 수() 공격자를 도울 수 공격 계획을 세우십시오.
설명 : 시스템 데이터 또는 디버깅 정보 소켓 또는 네트워크 연결을 통해 원격 컴퓨터에 프로그램을 벗어날 때
외부 정보 누출이 발생한다. 외부 누출은 공격자가 운영 체제, 전체 경로 이름, 사용자 이름이 존재하는 또는 구성 파일 위치에 관한 특정 데이터를 노출함으로써 공격자를 도울 수 있으며 공격자가 액세스하기가 더 어려운 내부 정보 유출보다 더 심각한 것입니다 ( ).
이 경우에 println에서()가 줄에 Utility.java이라고 86
그리고 권고이다;
권장 사항 : 보안을 염두에두고
쓰기 오류 메시지. 프로덕션 환경에서는 메시지를 사용하여 자세한 오류 정보를 해제하십시오. 관리자 및 프로그래머가 문제를 진단하는 데 도움이되는 자세한 출력 생성 및 저장을 제한하십시오. 예를 들어, 디버깅 흔적이 비정상적인 위치에 나타날 수 있습니다 (예 : 오류 페이지의 HTML 주석에 포함).
스택 추적 또는 데이터베이스 덤프를 표시하지 않는 간단한 오류 메시지조차도 잠재적으로 공격자를 도울 수 있습니다. 예를 들어, "액세스가 거부되었습니다" 메시지는 파일이나 사용자가 시스템에 있음을 나타낼 수 있습니다. 로 인해이 정보를 프로그램 외부의 리소스 인 으로 보내지 않고 항상 보관하는 것이 좋습니다.
이 문제를 해결하는 방법을 모르겠습니다. 어떤 제안이 있으십니까? 많은 감사합니다.
BR 알렉스
답변 해 주셔서 감사합니다. 그러나 "간단한 메시지 추가"솔루션은 적용 할 수 없습니다. 예외 메시지는 "추적 로그"가 아닌 자체 메시지로 대체되었습니다. 우리는 메시지를 전달하기 위해 예외를 사용하지 않으려 고합니다. –