2017-03-24 4 views
0

우리 프로젝트는 Fortify를 사용하여 코드를 스캔합니다. 코드를 검사 한 후에는 HttpServletResponse가 오류 메시지를 직접 작성하므로 감사 문제가 있습니다.Fortify에서 println()을 호출하여 시스템 데이터 또는 디버깅 정보를 표시하는 방법

response.getWriter().println(e.getLocalizedMessage()); 

다음은이 문제에 대한 설명입니다.

추상 :

함수 processNonPersistenceException() Utility.java에서이 라인 86에 println에 의해 공개 된 정보에에 println()를 호출하여 시스템 데이터 또는 디버깅 정보를 공개 할 수() 공격자를 도울 수 공격 계획을 세우십시오.

설명 : 시스템 데이터 또는 디버깅 정보 소켓 또는 네트워크 연결을 통해 원격 컴퓨터에 프로그램을 벗어날 때

외부 정보 누출이 발생한다. 외부 누출은 공격자가 운영 체제, 전체 경로 이름, 사용자 이름이 존재하는 또는 구성 파일 위치에 관한 특정 데이터를 노출함으로써 공격자를 도울 수 있으며 공격자가 액세스하기가 더 어려운 내부 정보 유출보다 더 심각한 것입니다 ( ).

이 경우에 println에서

()가 줄에 Utility.java이라고 86

그리고 권고이다;

권장 사항 : 보안을 염두에두고

쓰기 오류 메시지. 프로덕션 환경에서는 메시지를 사용하여 자세한 오류 정보를 해제하십시오. 관리자 및 프로그래머가 문제를 진단하는 데 도움이되는 자세한 출력 생성 및 저장을 제한하십시오. 예를 들어, 디버깅 흔적이 비정상적인 위치에 나타날 수 있습니다 (예 : 오류 페이지의 HTML 주석에 포함).

스택 추적 또는 데이터베이스 덤프를 표시하지 않는 간단한 오류 메시지조차도 잠재적으로 공격자를 도울 수 있습니다. 예를 들어, "액세스가 거부되었습니다" 메시지는 파일이나 사용자가 시스템에 있음을 나타낼 수 있습니다. 로 인해이 정보를 프로그램 외부의 리소스 인 으로 보내지 않고 항상 보관하는 것이 좋습니다.

이 문제를 해결하는 방법을 모르겠습니다. 어떤 제안이 있으십니까? 많은 감사합니다.

BR 알렉스

답변

0

나는 비슷한 문제에 대한 답을 찾고 있었어요이 우연히 만났다.

이 코드의 문제점은 최종 사용자에게 실제 예외 메시지을 보내는 매우 명확한 입니다.

실제 예외 추적 또는 기본 코드 세부 정보를 오류 메시지로 전달하지 않는 것이 좋습니다.

이것은 주로 해커가 프로그램에 대한 자세한 정보를 식별 할 수 없도록하기위한 것입니다. 스택 추적 또는 예외 메시지는 해커에게 너무 많은 정보를 제공 할 수 있습니다. 동시에 최종 사용자에게 도움이되지 않습니다.

단순히 간단한 메시지를 추가하여 문제를 해결. 예 : "예기치 않은 오류가 발생했습니다. 나중에 시도하십시오"또는 더 나은 것이 있습니다.

+0

답변 해 주셔서 감사합니다. 그러나 "간단한 메시지 추가"솔루션은 적용 할 수 없습니다. 예외 메시지는 "추적 로그"가 아닌 자체 메시지로 대체되었습니다. 우리는 메시지를 전달하기 위해 예외를 사용하지 않으려 고합니다. –

0

예외 메시지에는 종종 특정 라이브러리, DB 및 소프트웨어에서 사용되는 다른 구성 요소와 같은 공격자에게 유용한 정보가 포함되어 있습니다.

예외 메시지를 표시하는 대신 사람이 읽을 수있는 일반 메시지를 표시합니다 ("오류가 발생했습니다. 다시 시도하십시오. 지원 요청이 필요한 경우 사례 번호 36313을 참조하십시오."). 문제에 대해해야 할 일을 말함), 공격자에게 유용한 정보를 제공하지 않습니다. 서버 측에서 오류 메시지를 기록하고 사례 번호와 연결하면 지원 팀에서 모든 정보를 볼 수 있습니다.