2017-11-17 5 views
2

Azure Cloud Service에서 실행중인 My MVC 5 웹 응용 프로그램이 처리되지 않은 예외로 "클라이언트 (:)에서 잠재적으로 위험한 Request.Path 값이 감지되었습니다."와 충돌했습니다. http://myExampleHost.com/m:443/templates웹 위험 충돌을 피하기 위해 잠재적으로 위험한 Request.Path 값이 클라이언트 (:)에서 감지 되었습니까?

URL에 콜론 경로 유효성 검사를 통과 할 수 없습니다

이 사고의 원인은 일부 타사 (아마도 악성)이 URL을 내 엔드 포인트를 명중했다.

일부 답변 (A potentially dangerous Request.Path value was detected from the client (*))은 유효성 검사 규칙을 변경하는 것이 좋습니다. 그러나 보안 문제로 인해 타협하고 싶지 않을 수 있습니다.

우리는 예외를 잡아서 기록하고 충돌없이 오류 메시지를 반환합니다. 어떻게해야합니까?

더 일반적인 질문은 다음과 같습니다. 요청이 MVC의 컨트롤러에 도달하기 전에 예외를 catch하는 방법은 무엇입니까?

답변

2

우리는 예외를 잡아서 기록하고 충돌없이 오류 메시지를 반환합니다. 어떻게해야합니까?

제 생각에 Application_Error 이벤트를 활용하여 ASP.NET에서 처리되지 않은 예외를 캡처 할 수 있습니다. 여기 내 테스트, 당신은 그것을 참조 수 :

protected void Application_Error() 
{ 
    HttpContext httpContext = HttpContext.Current; 
    var exception=Server.GetLastError(); 
    var httpException = exception as HttpException ?? new HttpException(500, "Internal Server Error", exception); 
    var jsonResponse = new 
    { 
     Message = exception.Message, 
     StatusCode = httpException.GetHttpCode(), 
     StackTrace=httpException.StackTrace 
    }; 
    httpContext.Response.ContentType = "application/json"; 
    httpContext.Response.ContentEncoding = Encoding.UTF8; 
    httpContext.Response.Write(JsonConvert.SerializeObject(jsonResponse)); 
    httpContext.Response.End(); 
} 

enter image description here

참고 : 또한 특정 오류 페이지로 리디렉션 할 수 있습니다.

더욱이 web.config에서 customErrors을 활용하고 특정 HTTP 오류 코드의 오류 페이지를 잡을 수 있습니다. 또한 Application_EndRequest 이벤트 아래의 HTTP 상태 코드를 확인하고 사용자 지정 응답을 작성할 수 있습니다. 자세한 내용은 issue을 참조하십시오. 또한 오류 처리에 대한 자세한 내용은 Demystifying ASP.NET MVC 5 Error Pages and Error Logging을 따르는 것이 좋습니다.

+0

나는 우리가 에러를 전자 메일로 보내 사용자에게 일반 오류를 표시함으로써 매우 유사한 작업을 수행하므로 사용자가 수행 한 작업을 좋아합니다. 이 오류를 어떻게 구체적으로 잡을 수 있습니까? 우리는 최근에 다른 특정 함수에 대해 특별히 HttpRequestValidationException을 잡아야하고이 오류를 특별히 잡을 수있는 방법을 찾고자합니다. – RoLYroLLs