2011-01-10 8 views
1

Java 예외에서 중요한 세부 사항을 숨기려면 어떻게합니까? 다른 예외를 래핑하여 수행 할 수 있습니까?예외 랩핑 및 중요한 세부 사항 숨기기

만약 그렇다면,이 예외를 어떻게 숨길까요? 왜냐하면 내가 예외 @ 디버그 시간에 시계를 넣으면 이전 예외에 관한 모든 정보와 그것을 감싸고있는 정보를 볼 수 있기 때문입니다. ?

아직은 ASP.NET과 달리 Response.Write ("")를 호출하여 웹 페이지/응답 스트림에 친숙한 문자열을 쓸 수 있습니다. 이것은 Java 웹 기반 앱 (내장 서버로 설치하는 정렬)의 Java 플러그인입니다.

덕분에

+0

정확히 누구를 숨기고 싶어하는지 혼란 스럽습니다. –

답변

2

난 당신이 침입 이런 종류에 대해 민감한 데이터를 보호하기위한 언어 메커니즘 또는 VM 메커니즘에 의존해야 확실하지 않다. 디버거를 사용하는 경우 예외가 생성되는 곳에 중단 점을 넣고 데이터를 볼 수 있습니다.

큰 위험은 프로덕션 사용자가 볼 수있는 지점으로 캐치되지 않는 예외가 발생하거나 로그 메시지에 저장할 수있는 (종종 나쁜 것처럼) 위험이 크다는 것입니다. 좋은 예는 데이터베이스와 통신하는 것입니다. 어떤 종류의 오류 (단순한 시간 초과조차도)가있을 때 전체 쿼리가 기록되는 많은 시간입니다.

IMHO 이러한 이유로, 가장 좋은 방법은 새 예외에서 중요한 데이터를 저장하지 않거나 민감한 데이터를 사용하여 예외를 catch 할 가장 낮은 지점에서 새 예외를 만드는 것입니다 데이터를 생성하고 이전 예외를 삭제하고 중요한 데이터를 제공하지 않는 데이터를 작성하십시오.

예를 들어, 중요한 데이터가 포함 된 쿼리를 데이터베이스에 전송하는 메서드에서 예외를 만들 경우 실제 쿼리 텍스트를 저장하지 않거나 인수 (가능한 경우)를 일부 해시로 바꿉니다. 이렇게하면 데이터 내용을 공개하지 않고 반복적으로 범죄자를 찾을 수 있습니다.

이와 같은 데이터를 컨트롤 외부의 페이지에 쓰는 타사 구성 요소를 사용하는 경우 먼저 해당 플러그인을 사용하여 다시 고려해야 할 수 있습니다. 본인이 아는 한, 특정 개인 정보 보호 정책을 시행하는 관할 지역에있는 경우 이러한 정책을 준수하지 않는 타사 도구를 사용하면 여전히 책임을 질 수 있습니다.

+0

좋은 답변입니다. 당신이 말한 것을하고 민감한 세부 사항을 기록하는 것이 가장 좋을 것입니다. 문제는 세부 정보를 숨기려면 예외 메시지를 구문 분석해야합니다. – dotnetdev

+0

@dotnetdev : 이것은 의미 론적으로 의미있는 예외 클래스를 제공하지 않는 타사 라이브러리입니까? 이 경우 전체 메시지 문자열을 해시로 살지 않는 한 선택 사항이 없을 수 있습니다. 내 경험에 따르면, 어딘가에는 모든 문자열이 실수로 인쇄 될 가능성이 있습니다 :) – Uri

관련 문제