SlideShare a Scribd company logo
1 of 7
.NET 웹어플리케이션 예외정보 노출 방지
웹 서버의 예외 정보를 클라이언트로 보내지 말라!
황인균
2016. 01.28
2
요구사항
■ 요구사항
- 웹 어플리케이션의 서버측 예외를 클라이언트에 보내지 말라.
예를 들어, “Error.htm”같은 페이지를 리턴하라.
- 현재 운영되는 어플리케이션 코드는 수정하지 않고, configuation 또는 공통 모듈 수정만으로 해결하라.
이 요구사항을 만족하는 기술적인 방법은 간단하다.
3
예외 처리 #1
<!– IIS6 이하/IIS7.x 클래식 모드 -->
<system.web>
<!--handled by ASPX /-->
<customErrors …/>
</system.web>
<!– IIS 7.x 이상, 통합 모드 -->
<!-- handled by IIS -->
<system.webServer>
<httpErrors…/>
</system.webServer>
■ 방법 #1
얼른 떠오르는 방법은 다음과 같은 익숙한 방법이다.
웹서버측에서 예외가 발생하면 아래와 같은 설정을 사용하면 쉽게 사용자 정의 오류 페이지로 리다이레트 시켜서 반환할 수 있다.
<customErrors/>, <httpErrors/>
☞ <customErrors/>
- IIS6 이하.
- ASP.NET 웹 어플리케이션을 포함한 .NET 어플리케이션에서 발생하는 예외를 처리하기 위해서 사용
☞ <httpErrors/>
- IIS7.x 이상에서 추가.
- .NET어플리케이션에서의 예외뿐만 아니라 IIS로 전달되는 모든 예외를 처리하기 위해서 사용.
- IIS7에는 <customErrors/>도 하위 호환성을 위해서 포함되어 있음.
- IIS7.x 관리자 경로 : 사이트 노드 선택 > ASP.NET 섹션 > .NET오류 페이지
4
예외 처리 방법 #1 - <customErrors/>, <httpErrors/>
<system.web>
<!--handled by ASPX /-->
<customErrors mode="On" defaultRedirect="/Error.htm"/>
</system.web>
<!-- handled by IIS -->
HTTP 상태 코드별 예외 페이지를 지정한다. 아래 샘플은 모든 예외에 대해서 “Error.htm” 파일을 클라이언트로 보낸다.
<system.webServer>
<httpErrors errorMode="Custom" existingResponse="PassThrough" defaultResponseMode="File">
<remove statusCode="400" />
<error statusCode="400" path="/Error.htm" />
<remove statusCode="401" />
<error statusCode="401" path="/Error.htm" />
<remove statusCode="403" />
<error statusCode="403" path="/Error.htm" />
<remove statusCode="404" />
<error statusCode="404" path="/Error.htm" />
<remove statusCode="405" />
<error statusCode="405" path="/Error.htm" />
<remove statusCode="406" />
<error statusCode="406" path="/Error.htm" />
<remove statusCode="500" />
<error statusCode="500" path="/Error.htm" />
<remove statusCode="501" />
<error statusCode="501" path="/Error.htm" />
<remove statusCode="502" />
<error statusCode="502" path="/Error.htm" />
</httpErrors>
</system.webServer>
5
예외 처리 #1, 이슈
사이트
Web.config
(사용자 정의 예외처리 설정, Error.htm 반환 )
웹 애플리케이션
Service 어플리케이션
1) .aspx  부분적으로 NO
2) .svc  NO
.aspx  OK
하나의 웹 사이트 하위에 웹 어플리케이션과 웹 서비스 어플리케이션(.asmx, svc)이 함께 있는 경우, 문제가 발생한다.
웹 서비스를 호출한 클라이언트에서는 예외가 발생하면 인식할 수 있는 예외 메시지가 내려와야 한다. “Error.htm”같은 HTML 메시지
가 내려오면 클라이언트에서 예외가 발생한다. 클라이언트에서는 예외가 발생한 위치가 서버인지 클라이언트인지 확인할 수 없다.
즉 웹 서비스 호출시에는 서버특에서 예외가 발생하더라도 “Error.htm”을 반환하지 않고, 사용자가 정의한 예외 객체를 반환할 필요가
있다.
☞ Aspx 프로그램 실행 도중 예외가 발생하는 경우, 앞의 configuration은 OK ! 문제없다.
☞ aspx를 프로그램적으로 호출한다든가, 웹 서비스(asmx, svc)에서는 실행도중 오류가 발생하면 앞의 configuration은 문제가 된다.
6
추가 예외 처리 #2
1)서비스 어플리케이션 내에 있는 .aspx  부분적으로 NO
클라이언트에서 Hyper link나 브라우저를 통해서 호출된 경우라면 <customErrors/>, <httpErrors>의 작동에 따라서 “Error.htm”을 반환하는
것이 맞다. 그러나, 예를 들어 윈폼 클라이언트에서 aspx를 프로그램적으로 예를 들어서 WebRequest같은 객체를 이용해서
호출한다면 이 경우는 “Error.htm”을 반환하면 클라이언트에서 예외가 발생한다.
이런 경우는 다른 방식으로 예외 처리를 해야 한다. 예를 들어 다음과 같은 방법을 사용할 수 있다.
서버에서 예외가 발생하면, “예외가 발생했다는 플래그를 문자열에 넣어서, 문자열을 반환”한다. 그렇게 하면 서버측에서는 <customErrors/>,
<httpErrors/>를 통과해서 클라이언트로 전달될 것이다. 클라이언트에서는 플래그의 포함 여부를 확인해서 서버측에서의 예외 발생을 확인
할 수 있다.
2) 웹 서비스(.svc)  NO
웹 서비스에서 예외가 발생하는 경우, <customErrors/>, <httpErrors/>를 통과할 수 있는 방법은 <httpErrors/>의 특정 어트리뷰트 값을 사
용하면 된다.
<!-- handled by IIS -->
<system.webServer>
<httpErrors errorMode="Custom" existingResponse="PassThrough" defaultResponseMode="File">
<remove statusCode="400" />
…
7
참고) WCF 예외 처리
■ 요구사항
- 하나의 웹 어플리케이션에 ASP.NET과 WCF 서비스가 함께 포함되어 있는 있을때, WCF 서비스의 예외를 클라이언트로 그대로 보내는
대신에 자세한 오류 내용은 없애고, 단지 사용자 정의 오류 메시지만 클라이언트로 보내라.
■ 방법
- WCF 서비스 인스펙터 정의 사용
public class ErrorHandlerInspector : IErrorHandler
{
public bool HandleError(Exception error)
{
return !(error is FaultException);
}
public void ProvideFault(Exception e, System.ServiceModel.Channels.MessageVersion version
, ref System.ServiceModel.Channels.Message fault)
{
if (!(e is FaultException))
{
FaultException<ExceptionDetail> fex =
new FaultException<ExceptionDetail>(new ExceptionDetail(new Exception( “사용자정의 메시지”)),
new FaultReason(“사용자정의 메시지”), new FaultCode("서버오류"), null);
fault = Message.CreateMessage(version, fex.CreateMessageFault(), null);
}
}
}
정의한 WCF서비스 인스펙터를 configuration에 추가하는 작업이 필요하다.
“WCF 인스펙터 등록”으로 구글링하면 찾아볼 수 있다. 달봉이 공부방에서도 정리하고 있다(http://dalbong2.net/199 )

More Related Content

Viewers also liked

내 생애 최고의_게임
내 생애 최고의_게임내 생애 최고의_게임
내 생애 최고의_게임Lee Hansoo
 
노트북 응답 속도 문제 덤프 추출테스트 이력
노트북 응답 속도 문제 덤프 추출테스트 이력노트북 응답 속도 문제 덤프 추출테스트 이력
노트북 응답 속도 문제 덤프 추출테스트 이력InGuen Hwang
 
01.windows 보안(접근제어모델 리뷰) 2016.05.25
01.windows 보안(접근제어모델 리뷰)   2016.05.2501.windows 보안(접근제어모델 리뷰)   2016.05.25
01.windows 보안(접근제어모델 리뷰) 2016.05.25InGuen Hwang
 
01. kpi기반의 정량적 성능 평가 체계 구축
01. kpi기반의 정량적 성능 평가 체계 구축01. kpi기반의 정량적 성능 평가 체계 구축
01. kpi기반의 정량적 성능 평가 체계 구축InGuen Hwang
 
03. it정보화전략-솔루션 도입
03. it정보화전략-솔루션 도입03. it정보화전략-솔루션 도입
03. it정보화전략-솔루션 도입InGuen Hwang
 
Sha 2 기반 인증서 업그레이드 이해
Sha 2 기반 인증서 업그레이드 이해Sha 2 기반 인증서 업그레이드 이해
Sha 2 기반 인증서 업그레이드 이해InGuen Hwang
 
IT표준화-아키텍처,프로세스-2015.09.30
IT표준화-아키텍처,프로세스-2015.09.30IT표준화-아키텍처,프로세스-2015.09.30
IT표준화-아키텍처,프로세스-2015.09.30InGuen Hwang
 
떠먹여주는 Memcached 1
떠먹여주는 Memcached 1떠먹여주는 Memcached 1
떠먹여주는 Memcached 1Jinwoo Hong
 
ndc14 포춘시리즈개발자의 풀타임인디개발생존기
ndc14 포춘시리즈개발자의 풀타임인디개발생존기ndc14 포춘시리즈개발자의 풀타임인디개발생존기
ndc14 포춘시리즈개발자의 풀타임인디개발생존기Seok Kyu Chang
 
04. it정보화전략-어플리케이션 아키텍처
04. it정보화전략-어플리케이션 아키텍처04. it정보화전략-어플리케이션 아키텍처
04. it정보화전략-어플리케이션 아키텍처InGuen Hwang
 
IT전략계획-04.보안 아키텍처
IT전략계획-04.보안 아키텍처IT전략계획-04.보안 아키텍처
IT전략계획-04.보안 아키텍처InGuen Hwang
 
05. it정보화전략-어플리케이션 프레임워크
05. it정보화전략-어플리케이션 프레임워크05. it정보화전략-어플리케이션 프레임워크
05. it정보화전략-어플리케이션 프레임워크InGuen Hwang
 
네트워크와 보안
네트워크와 보안네트워크와 보안
네트워크와 보안InGuen Hwang
 
[NDC 14] 가죽 장화를 먹게 해달라니 - &lt;야생의>의 자유도 높은 아이템 시스템 구현
[NDC 14] 가죽 장화를 먹게 해달라니 - &lt;야생의>의 자유도 높은 아이템 시스템 구현[NDC 14] 가죽 장화를 먹게 해달라니 - &lt;야생의>의 자유도 높은 아이템 시스템 구현
[NDC 14] 가죽 장화를 먹게 해달라니 - &lt;야생의>의 자유도 높은 아이템 시스템 구현Hoyoung Choi
 
마커스교육자료(디자인)
마커스교육자료(디자인)마커스교육자료(디자인)
마커스교육자료(디자인)Joong Keun Park
 
THE_NPCMASTER_PUBLIC
THE_NPCMASTER_PUBLICTHE_NPCMASTER_PUBLIC
THE_NPCMASTER_PUBLICkhalbora
 
NDC14 - 엄마와 누나가 게임을 즐기는 법 : [에브리타운 for kakao] 서비스 포스트 모텀
NDC14 - 엄마와 누나가 게임을 즐기는 법 : [에브리타운 for kakao] 서비스 포스트 모텀NDC14 - 엄마와 누나가 게임을 즐기는 법 : [에브리타운 for kakao] 서비스 포스트 모텀
NDC14 - 엄마와 누나가 게임을 즐기는 법 : [에브리타운 for kakao] 서비스 포스트 모텀Young Keun Choe
 
[ NDC 14 ] 가죽 장화를 먹게 해주세요 - [ 야생의 땅 : 듀랑고 ] 의 자유도 높은 아이템 시스템 디자인
[ NDC 14 ] 가죽 장화를 먹게 해주세요 - [ 야생의 땅 : 듀랑고 ] 의 자유도 높은 아이템 시스템 디자인 [ NDC 14 ] 가죽 장화를 먹게 해주세요 - [ 야생의 땅 : 듀랑고 ] 의 자유도 높은 아이템 시스템 디자인
[ NDC 14 ] 가죽 장화를 먹게 해주세요 - [ 야생의 땅 : 듀랑고 ] 의 자유도 높은 아이템 시스템 디자인 Jungsoo Lee
 

Viewers also liked (20)

내 생애 최고의_게임
내 생애 최고의_게임내 생애 최고의_게임
내 생애 최고의_게임
 
노트북 응답 속도 문제 덤프 추출테스트 이력
노트북 응답 속도 문제 덤프 추출테스트 이력노트북 응답 속도 문제 덤프 추출테스트 이력
노트북 응답 속도 문제 덤프 추출테스트 이력
 
01.windows 보안(접근제어모델 리뷰) 2016.05.25
01.windows 보안(접근제어모델 리뷰)   2016.05.2501.windows 보안(접근제어모델 리뷰)   2016.05.25
01.windows 보안(접근제어모델 리뷰) 2016.05.25
 
01. kpi기반의 정량적 성능 평가 체계 구축
01. kpi기반의 정량적 성능 평가 체계 구축01. kpi기반의 정량적 성능 평가 체계 구축
01. kpi기반의 정량적 성능 평가 체계 구축
 
03. it정보화전략-솔루션 도입
03. it정보화전략-솔루션 도입03. it정보화전략-솔루션 도입
03. it정보화전략-솔루션 도입
 
Sha 2 기반 인증서 업그레이드 이해
Sha 2 기반 인증서 업그레이드 이해Sha 2 기반 인증서 업그레이드 이해
Sha 2 기반 인증서 업그레이드 이해
 
IT표준화-아키텍처,프로세스-2015.09.30
IT표준화-아키텍처,프로세스-2015.09.30IT표준화-아키텍처,프로세스-2015.09.30
IT표준화-아키텍처,프로세스-2015.09.30
 
떠먹여주는 Memcached 1
떠먹여주는 Memcached 1떠먹여주는 Memcached 1
떠먹여주는 Memcached 1
 
ndc14 포춘시리즈개발자의 풀타임인디개발생존기
ndc14 포춘시리즈개발자의 풀타임인디개발생존기ndc14 포춘시리즈개발자의 풀타임인디개발생존기
ndc14 포춘시리즈개발자의 풀타임인디개발생존기
 
Lh포폴완성
Lh포폴완성Lh포폴완성
Lh포폴완성
 
04. it정보화전략-어플리케이션 아키텍처
04. it정보화전략-어플리케이션 아키텍처04. it정보화전략-어플리케이션 아키텍처
04. it정보화전략-어플리케이션 아키텍처
 
암호화
암호화암호화
암호화
 
IT전략계획-04.보안 아키텍처
IT전략계획-04.보안 아키텍처IT전략계획-04.보안 아키텍처
IT전략계획-04.보안 아키텍처
 
05. it정보화전략-어플리케이션 프레임워크
05. it정보화전략-어플리케이션 프레임워크05. it정보화전략-어플리케이션 프레임워크
05. it정보화전략-어플리케이션 프레임워크
 
네트워크와 보안
네트워크와 보안네트워크와 보안
네트워크와 보안
 
[NDC 14] 가죽 장화를 먹게 해달라니 - &lt;야생의>의 자유도 높은 아이템 시스템 구현
[NDC 14] 가죽 장화를 먹게 해달라니 - &lt;야생의>의 자유도 높은 아이템 시스템 구현[NDC 14] 가죽 장화를 먹게 해달라니 - &lt;야생의>의 자유도 높은 아이템 시스템 구현
[NDC 14] 가죽 장화를 먹게 해달라니 - &lt;야생의>의 자유도 높은 아이템 시스템 구현
 
마커스교육자료(디자인)
마커스교육자료(디자인)마커스교육자료(디자인)
마커스교육자료(디자인)
 
THE_NPCMASTER_PUBLIC
THE_NPCMASTER_PUBLICTHE_NPCMASTER_PUBLIC
THE_NPCMASTER_PUBLIC
 
NDC14 - 엄마와 누나가 게임을 즐기는 법 : [에브리타운 for kakao] 서비스 포스트 모텀
NDC14 - 엄마와 누나가 게임을 즐기는 법 : [에브리타운 for kakao] 서비스 포스트 모텀NDC14 - 엄마와 누나가 게임을 즐기는 법 : [에브리타운 for kakao] 서비스 포스트 모텀
NDC14 - 엄마와 누나가 게임을 즐기는 법 : [에브리타운 for kakao] 서비스 포스트 모텀
 
[ NDC 14 ] 가죽 장화를 먹게 해주세요 - [ 야생의 땅 : 듀랑고 ] 의 자유도 높은 아이템 시스템 디자인
[ NDC 14 ] 가죽 장화를 먹게 해주세요 - [ 야생의 땅 : 듀랑고 ] 의 자유도 높은 아이템 시스템 디자인 [ NDC 14 ] 가죽 장화를 먹게 해주세요 - [ 야생의 땅 : 듀랑고 ] 의 자유도 높은 아이템 시스템 디자인
[ NDC 14 ] 가죽 장화를 먹게 해주세요 - [ 야생의 땅 : 듀랑고 ] 의 자유도 높은 아이템 시스템 디자인
 

Similar to .net 웹어플리케이션 예외정보 노출 방지

HeadFisrt Servlet&JSP Chapter 3
HeadFisrt Servlet&JSP Chapter 3HeadFisrt Servlet&JSP Chapter 3
HeadFisrt Servlet&JSP Chapter 3J B
 
자바 웹 개발 시작하기 (7주차 : 국제화, 확인검증, 예외처리)
자바 웹 개발 시작하기 (7주차 : 국제화, 확인검증, 예외처리)자바 웹 개발 시작하기 (7주차 : 국제화, 확인검증, 예외처리)
자바 웹 개발 시작하기 (7주차 : 국제화, 확인검증, 예외처리)DK Lee
 
Trace End-User Request (조동진)
Trace End-User Request (조동진)Trace End-User Request (조동진)
Trace End-User Request (조동진)삵 (sarc.io)
 
Spring mvc
Spring mvcSpring mvc
Spring mvcksain
 
#22.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_스프링프레임워크 강좌, 재직자환급교육,실업자국비지원...
#22.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_스프링프레임워크 강좌, 재직자환급교육,실업자국비지원...#22.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_스프링프레임워크 강좌, 재직자환급교육,실업자국비지원...
#22.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_스프링프레임워크 강좌, 재직자환급교육,실업자국비지원...탑크리에듀(구로디지털단지역3번출구 2분거리)
 
막하는 스터디 첫 번째 만남 Node.js
막하는 스터디 첫 번째 만남 Node.js막하는 스터디 첫 번째 만남 Node.js
막하는 스터디 첫 번째 만남 Node.js연웅 조
 
02.실행환경 실습교재(데이터처리)
02.실행환경 실습교재(데이터처리)02.실행환경 실습교재(데이터처리)
02.실행환경 실습교재(데이터처리)Hankyo
 
vine webdev
vine webdevvine webdev
vine webdevdcfc1997
 
04.실행환경 교육교재(화면처리)
04.실행환경 교육교재(화면처리)04.실행환경 교육교재(화면처리)
04.실행환경 교육교재(화면처리)Hankyo
 
응답하라 반응형웹 - 3. bootstrap
응답하라 반응형웹 - 3. bootstrap응답하라 반응형웹 - 3. bootstrap
응답하라 반응형웹 - 3. bootstrapredribbon1307
 
Network path reference
Network path referenceNetwork path reference
Network path referenceSol Kim
 
Spring test mvc 발표자료
Spring test mvc 발표자료Spring test mvc 발표자료
Spring test mvc 발표자료수홍 이
 
파이썬 웹 프로그래밍 2탄
파이썬 웹 프로그래밍 2탄 파이썬 웹 프로그래밍 2탄
파이썬 웹 프로그래밍 2탄 SeongHyun Ahn
 
Xe3.0 frontend validator
Xe3.0 frontend validatorXe3.0 frontend validator
Xe3.0 frontend validator승훈 오
 
Web App Security 2015.10
Web App Security 2015.10Web App Security 2015.10
Web App Security 2015.10Chanjin Park
 
자바스크립트 프레임워크 살펴보기
자바스크립트 프레임워크 살펴보기자바스크립트 프레임워크 살펴보기
자바스크립트 프레임워크 살펴보기Jeado Ko
 
더 나은 웹표준을 위한 Web Components
더 나은 웹표준을 위한 Web Components더 나은 웹표준을 위한 Web Components
더 나은 웹표준을 위한 Web Components정호 전
 

Similar to .net 웹어플리케이션 예외정보 노출 방지 (20)

HeadFisrt Servlet&JSP Chapter 3
HeadFisrt Servlet&JSP Chapter 3HeadFisrt Servlet&JSP Chapter 3
HeadFisrt Servlet&JSP Chapter 3
 
자바 웹 개발 시작하기 (7주차 : 국제화, 확인검증, 예외처리)
자바 웹 개발 시작하기 (7주차 : 국제화, 확인검증, 예외처리)자바 웹 개발 시작하기 (7주차 : 국제화, 확인검증, 예외처리)
자바 웹 개발 시작하기 (7주차 : 국제화, 확인검증, 예외처리)
 
Trace End-User Request (조동진)
Trace End-User Request (조동진)Trace End-User Request (조동진)
Trace End-User Request (조동진)
 
Spring mvc
Spring mvcSpring mvc
Spring mvc
 
#22.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_스프링프레임워크 강좌, 재직자환급교육,실업자국비지원...
#22.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_스프링프레임워크 강좌, 재직자환급교육,실업자국비지원...#22.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_스프링프레임워크 강좌, 재직자환급교육,실업자국비지원...
#22.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_스프링프레임워크 강좌, 재직자환급교육,실업자국비지원...
 
막하는 스터디 첫 번째 만남 Node.js
막하는 스터디 첫 번째 만남 Node.js막하는 스터디 첫 번째 만남 Node.js
막하는 스터디 첫 번째 만남 Node.js
 
Html5 performance
Html5 performanceHtml5 performance
Html5 performance
 
02.실행환경 실습교재(데이터처리)
02.실행환경 실습교재(데이터처리)02.실행환경 실습교재(데이터처리)
02.실행환경 실습교재(데이터처리)
 
Servlet3
Servlet3Servlet3
Servlet3
 
vine webdev
vine webdevvine webdev
vine webdev
 
04.실행환경 교육교재(화면처리)
04.실행환경 교육교재(화면처리)04.실행환경 교육교재(화면처리)
04.실행환경 교육교재(화면처리)
 
응답하라 반응형웹 - 3. bootstrap
응답하라 반응형웹 - 3. bootstrap응답하라 반응형웹 - 3. bootstrap
응답하라 반응형웹 - 3. bootstrap
 
Network path reference
Network path referenceNetwork path reference
Network path reference
 
Spring test mvc 발표자료
Spring test mvc 발표자료Spring test mvc 발표자료
Spring test mvc 발표자료
 
파이썬 웹 프로그래밍 2탄
파이썬 웹 프로그래밍 2탄 파이썬 웹 프로그래밍 2탄
파이썬 웹 프로그래밍 2탄
 
Xe3.0 frontend validator
Xe3.0 frontend validatorXe3.0 frontend validator
Xe3.0 frontend validator
 
4-3. jquery
4-3. jquery4-3. jquery
4-3. jquery
 
Web App Security 2015.10
Web App Security 2015.10Web App Security 2015.10
Web App Security 2015.10
 
자바스크립트 프레임워크 살펴보기
자바스크립트 프레임워크 살펴보기자바스크립트 프레임워크 살펴보기
자바스크립트 프레임워크 살펴보기
 
더 나은 웹표준을 위한 Web Components
더 나은 웹표준을 위한 Web Components더 나은 웹표준을 위한 Web Components
더 나은 웹표준을 위한 Web Components
 

More from InGuen Hwang

01. 워크샵 행복과 아이교육 01
01. 워크샵   행복과 아이교육 0101. 워크샵   행복과 아이교육 01
01. 워크샵 행복과 아이교육 01InGuen Hwang
 
02. 워크샵 아이 교육 big picture 01
02. 워크샵   아이 교육 big picture 0102. 워크샵   아이 교육 big picture 01
02. 워크샵 아이 교육 big picture 01InGuen Hwang
 
행복과 자녀 교육
행복과 자녀 교육행복과 자녀 교육
행복과 자녀 교육InGuen Hwang
 
02. it정보화전략-보안 아키텍처 도입
02. it정보화전략-보안 아키텍처 도입02. it정보화전략-보안 아키텍처 도입
02. it정보화전략-보안 아키텍처 도입InGuen Hwang
 
01. it정보화전략-it 기술기반 도입 계획
01. it정보화전략-it 기술기반 도입 계획01. it정보화전략-it 기술기반 도입 계획
01. it정보화전략-it 기술기반 도입 계획InGuen Hwang
 
00. it정보화전략-들어가기
00. it정보화전략-들어가기00. it정보화전략-들어가기
00. it정보화전략-들어가기InGuen Hwang
 
IT전략계획- 03.IT 도입계획
IT전략계획- 03.IT 도입계획IT전략계획- 03.IT 도입계획
IT전략계획- 03.IT 도입계획InGuen Hwang
 
IT전략계획- 02.정보전략계획(isp)
IT전략계획- 02.정보전략계획(isp)IT전략계획- 02.정보전략계획(isp)
IT전략계획- 02.정보전략계획(isp)InGuen Hwang
 
IT전략계획 - 01.사업계획
IT전략계획 - 01.사업계획IT전략계획 - 01.사업계획
IT전략계획 - 01.사업계획InGuen Hwang
 
어셈블리 로딩 컨텍스트
어셈블리 로딩 컨텍스트어셈블리 로딩 컨텍스트
어셈블리 로딩 컨텍스트InGuen Hwang
 
Windows security context
Windows security contextWindows security context
Windows security contextInGuen Hwang
 
정보화 계획 수립 개념
정보화 계획 수립 개념정보화 계획 수립 개념
정보화 계획 수립 개념InGuen Hwang
 
Html ui 페이지 코딩
Html ui 페이지 코딩Html ui 페이지 코딩
Html ui 페이지 코딩InGuen Hwang
 

More from InGuen Hwang (15)

01. 워크샵 행복과 아이교육 01
01. 워크샵   행복과 아이교육 0101. 워크샵   행복과 아이교육 01
01. 워크샵 행복과 아이교육 01
 
02. 워크샵 아이 교육 big picture 01
02. 워크샵   아이 교육 big picture 0102. 워크샵   아이 교육 big picture 01
02. 워크샵 아이 교육 big picture 01
 
행복과 자녀 교육
행복과 자녀 교육행복과 자녀 교육
행복과 자녀 교육
 
02. it정보화전략-보안 아키텍처 도입
02. it정보화전략-보안 아키텍처 도입02. it정보화전략-보안 아키텍처 도입
02. it정보화전략-보안 아키텍처 도입
 
01. it정보화전략-it 기술기반 도입 계획
01. it정보화전략-it 기술기반 도입 계획01. it정보화전략-it 기술기반 도입 계획
01. it정보화전략-it 기술기반 도입 계획
 
00. it정보화전략-들어가기
00. it정보화전략-들어가기00. it정보화전략-들어가기
00. it정보화전략-들어가기
 
IT전략계획- 03.IT 도입계획
IT전략계획- 03.IT 도입계획IT전략계획- 03.IT 도입계획
IT전략계획- 03.IT 도입계획
 
IT전략계획- 02.정보전략계획(isp)
IT전략계획- 02.정보전략계획(isp)IT전략계획- 02.정보전략계획(isp)
IT전략계획- 02.정보전략계획(isp)
 
IT전략계획 - 01.사업계획
IT전략계획 - 01.사업계획IT전략계획 - 01.사업계획
IT전략계획 - 01.사업계획
 
어셈블리 로딩 컨텍스트
어셈블리 로딩 컨텍스트어셈블리 로딩 컨텍스트
어셈블리 로딩 컨텍스트
 
Locate Assembly
Locate AssemblyLocate Assembly
Locate Assembly
 
Windows security context
Windows security contextWindows security context
Windows security context
 
정보화 계획 수립 개념
정보화 계획 수립 개념정보화 계획 수립 개념
정보화 계획 수립 개념
 
Html ui 페이지 코딩
Html ui 페이지 코딩Html ui 페이지 코딩
Html ui 페이지 코딩
 
Naeyo사용법
Naeyo사용법Naeyo사용법
Naeyo사용법
 

.net 웹어플리케이션 예외정보 노출 방지

  • 1. .NET 웹어플리케이션 예외정보 노출 방지 웹 서버의 예외 정보를 클라이언트로 보내지 말라! 황인균 2016. 01.28
  • 2. 2 요구사항 ■ 요구사항 - 웹 어플리케이션의 서버측 예외를 클라이언트에 보내지 말라. 예를 들어, “Error.htm”같은 페이지를 리턴하라. - 현재 운영되는 어플리케이션 코드는 수정하지 않고, configuation 또는 공통 모듈 수정만으로 해결하라. 이 요구사항을 만족하는 기술적인 방법은 간단하다.
  • 3. 3 예외 처리 #1 <!– IIS6 이하/IIS7.x 클래식 모드 --> <system.web> <!--handled by ASPX /--> <customErrors …/> </system.web> <!– IIS 7.x 이상, 통합 모드 --> <!-- handled by IIS --> <system.webServer> <httpErrors…/> </system.webServer> ■ 방법 #1 얼른 떠오르는 방법은 다음과 같은 익숙한 방법이다. 웹서버측에서 예외가 발생하면 아래와 같은 설정을 사용하면 쉽게 사용자 정의 오류 페이지로 리다이레트 시켜서 반환할 수 있다. <customErrors/>, <httpErrors/> ☞ <customErrors/> - IIS6 이하. - ASP.NET 웹 어플리케이션을 포함한 .NET 어플리케이션에서 발생하는 예외를 처리하기 위해서 사용 ☞ <httpErrors/> - IIS7.x 이상에서 추가. - .NET어플리케이션에서의 예외뿐만 아니라 IIS로 전달되는 모든 예외를 처리하기 위해서 사용. - IIS7에는 <customErrors/>도 하위 호환성을 위해서 포함되어 있음. - IIS7.x 관리자 경로 : 사이트 노드 선택 > ASP.NET 섹션 > .NET오류 페이지
  • 4. 4 예외 처리 방법 #1 - <customErrors/>, <httpErrors/> <system.web> <!--handled by ASPX /--> <customErrors mode="On" defaultRedirect="/Error.htm"/> </system.web> <!-- handled by IIS --> HTTP 상태 코드별 예외 페이지를 지정한다. 아래 샘플은 모든 예외에 대해서 “Error.htm” 파일을 클라이언트로 보낸다. <system.webServer> <httpErrors errorMode="Custom" existingResponse="PassThrough" defaultResponseMode="File"> <remove statusCode="400" /> <error statusCode="400" path="/Error.htm" /> <remove statusCode="401" /> <error statusCode="401" path="/Error.htm" /> <remove statusCode="403" /> <error statusCode="403" path="/Error.htm" /> <remove statusCode="404" /> <error statusCode="404" path="/Error.htm" /> <remove statusCode="405" /> <error statusCode="405" path="/Error.htm" /> <remove statusCode="406" /> <error statusCode="406" path="/Error.htm" /> <remove statusCode="500" /> <error statusCode="500" path="/Error.htm" /> <remove statusCode="501" /> <error statusCode="501" path="/Error.htm" /> <remove statusCode="502" /> <error statusCode="502" path="/Error.htm" /> </httpErrors> </system.webServer>
  • 5. 5 예외 처리 #1, 이슈 사이트 Web.config (사용자 정의 예외처리 설정, Error.htm 반환 ) 웹 애플리케이션 Service 어플리케이션 1) .aspx  부분적으로 NO 2) .svc  NO .aspx  OK 하나의 웹 사이트 하위에 웹 어플리케이션과 웹 서비스 어플리케이션(.asmx, svc)이 함께 있는 경우, 문제가 발생한다. 웹 서비스를 호출한 클라이언트에서는 예외가 발생하면 인식할 수 있는 예외 메시지가 내려와야 한다. “Error.htm”같은 HTML 메시지 가 내려오면 클라이언트에서 예외가 발생한다. 클라이언트에서는 예외가 발생한 위치가 서버인지 클라이언트인지 확인할 수 없다. 즉 웹 서비스 호출시에는 서버특에서 예외가 발생하더라도 “Error.htm”을 반환하지 않고, 사용자가 정의한 예외 객체를 반환할 필요가 있다. ☞ Aspx 프로그램 실행 도중 예외가 발생하는 경우, 앞의 configuration은 OK ! 문제없다. ☞ aspx를 프로그램적으로 호출한다든가, 웹 서비스(asmx, svc)에서는 실행도중 오류가 발생하면 앞의 configuration은 문제가 된다.
  • 6. 6 추가 예외 처리 #2 1)서비스 어플리케이션 내에 있는 .aspx  부분적으로 NO 클라이언트에서 Hyper link나 브라우저를 통해서 호출된 경우라면 <customErrors/>, <httpErrors>의 작동에 따라서 “Error.htm”을 반환하는 것이 맞다. 그러나, 예를 들어 윈폼 클라이언트에서 aspx를 프로그램적으로 예를 들어서 WebRequest같은 객체를 이용해서 호출한다면 이 경우는 “Error.htm”을 반환하면 클라이언트에서 예외가 발생한다. 이런 경우는 다른 방식으로 예외 처리를 해야 한다. 예를 들어 다음과 같은 방법을 사용할 수 있다. 서버에서 예외가 발생하면, “예외가 발생했다는 플래그를 문자열에 넣어서, 문자열을 반환”한다. 그렇게 하면 서버측에서는 <customErrors/>, <httpErrors/>를 통과해서 클라이언트로 전달될 것이다. 클라이언트에서는 플래그의 포함 여부를 확인해서 서버측에서의 예외 발생을 확인 할 수 있다. 2) 웹 서비스(.svc)  NO 웹 서비스에서 예외가 발생하는 경우, <customErrors/>, <httpErrors/>를 통과할 수 있는 방법은 <httpErrors/>의 특정 어트리뷰트 값을 사 용하면 된다. <!-- handled by IIS --> <system.webServer> <httpErrors errorMode="Custom" existingResponse="PassThrough" defaultResponseMode="File"> <remove statusCode="400" /> …
  • 7. 7 참고) WCF 예외 처리 ■ 요구사항 - 하나의 웹 어플리케이션에 ASP.NET과 WCF 서비스가 함께 포함되어 있는 있을때, WCF 서비스의 예외를 클라이언트로 그대로 보내는 대신에 자세한 오류 내용은 없애고, 단지 사용자 정의 오류 메시지만 클라이언트로 보내라. ■ 방법 - WCF 서비스 인스펙터 정의 사용 public class ErrorHandlerInspector : IErrorHandler { public bool HandleError(Exception error) { return !(error is FaultException); } public void ProvideFault(Exception e, System.ServiceModel.Channels.MessageVersion version , ref System.ServiceModel.Channels.Message fault) { if (!(e is FaultException)) { FaultException<ExceptionDetail> fex = new FaultException<ExceptionDetail>(new ExceptionDetail(new Exception( “사용자정의 메시지”)), new FaultReason(“사용자정의 메시지”), new FaultCode("서버오류"), null); fault = Message.CreateMessage(version, fex.CreateMessageFault(), null); } } } 정의한 WCF서비스 인스펙터를 configuration에 추가하는 작업이 필요하다. “WCF 인스펙터 등록”으로 구글링하면 찾아볼 수 있다. 달봉이 공부방에서도 정리하고 있다(http://dalbong2.net/199 )