0

ASP.NET MVC 5 앱이 있지만 MVC 3, 4인지 여부는 중요하지 않습니다. NWebSec 3.0 모듈을 리디렉션 유효성 검사를 사용하여 설치했습니다. (나는 하나의 문제가 동일하지 않은 경우에도!) 나는함으로써 Application_Error 방법이 있습니다NWebsec.Core.Exceptions.RedirectValidationException 후 오류 컨트롤러로 리디렉션하는 방법

protected void Application_Error(object sender, EventArgs e) 
    { 
     HttpContext httpContext = ((MvcApplication)sender).Context; 
     Exception exception = Server.GetLastError(); 
     if(exception is NWebsec.Core.Exceptions.RedirectValidationException) 
     { 
      Trace.WriteLine("How to redirect from here to ErrorController/Index?"); 
     } 
     else 
     { 
      Trace.WriteLine("How to redirect from here to ErrorController/Index?"); 

Herer가 HomeControllers에서이 시험 방법은 다음과 같습니다

public ActionResult Redirect() 
    { 
     return new RedirectResult("http://www.deshow.net/d/file/travel/2010-04/bing-landscape-wallpaper-845-2.jpg"); 
    } 

    public ActionResult ParseError() 
    { 
     int.Parse("test"); 
     return View(); 
    } 

그리고 표준 공유 오류보기를 가지고

<customErrors mode="On" defaultRedirect="~/Error" /> 

사용할 수 있습니다.

오류가 무엇이든지 오류보기로 리디렉션 될 것으로 기대합니다. 하지만 리디렉션 메서드를 호출 할 때 사실이 아닙니다. 어떻게 든 리디렉션 오류가 발생하면 표준 '사용자 정의 오류'메커니즘이 무시되고 표준 오류보기가 표시되지 않습니다.

ParseError()가 눌린 후 Application_Error가 히트되지 않고 표준 '사용자 정의 오류'보기가 표시되지만 Redirect()가 눌려지면 '사용자 정의 오류'보기는 없지만 죽음의 노란색 화면이 있다는 점이 다릅니다. 이것은 내가 아마도 http 모듈의 '파이프 라인'을 제대로 이해하지 못하고 있다고 생각하게 만듭니다.

NWebSec은 잘못된 리디렉션과 교차하여 NWebsec.Core.Exceptions.RedirectValidationException을 발생시킵니다. e - - e-e - 이미 e -s 대답하지만 난 그것을 알아낼 수 없습니다 나는 NwebSec 내가 the을 읽을 모듈

<system.webServer> 
    <modules> 
     ... 
    <add name="NWebsecHttpHeaderSecurityModule" type="NWebsec.Modules.HttpHeaderSecurityModule, NWebsec, Version=3.2.0.0, Culture=neutral, PublicKeyToken=3613da5f958908a1" /> 
    ... 
    </modules> 
    </system.webServer> 

로 등록되어 있기 때문에 그렇게 가정하자. 그러한 문제에 대한 답을 제시하거나 샘플 구현을 제공 할 수 있습니까?

답변

1

당신이 ErrorsController에 RedirectValidation 작용을 가정 할 때,이 같은 작동합니다 : 당신이 처리하는 것을 제외하고

protected void Application_Error(object sender, EventArgs e) 
{ 
    var routeData = new RouteData(); 
    routeData.Values["controller"] = "error"; 

    var exception = Server.GetLastError(); 

    if(exception is NWebsec.Core.Exceptions.RedirectValidationException) 
    { 
     routeData.Values["action"] = "redirectvalidation"; 
    } 
    else 
    { 
     // handle everything else 
    } 

    Response.Clear(); 
    Server.ClearError(); 

    // Avoid IIS7 getting in the middle 
    Response.TrySkipIisCustomErrors = true; 

    IController errorsController = new Controllers.ErrorController(); 
    HttpContextBase wrapper = new HttpContextWrapper(Context); 

    var rc = new RequestContext(wrapper, routeData); 
    errorsController.Execute(rc); 
} 

그것은 기본적으로 연결된 답변 중 하나가하고 같은 일이 그 예외의 매우 구체적인 유형 . 업로드 크기 제한을 초과하여 발생하는 예외에 대해서도 비슷한 일을합니다.

0

같은 문제가 발생했습니다. documentation은 리디렉션시 3.x 버전이 약간의 기회가 있음을 설명합니다. 따라서 승인 된 URL 리디렉션을 허용 목록에 추가해야합니다 (맞춤 포트도 허용).

구성에서 allowSameHostRedirectsToHttps 노드를 업데이트하십시오.

<redirectValidation enabled="true"> 
    <allowSameHostRedirectsToHttps enabled="true" /> 
    <!--<allowSameHostRedirectsToHttps enabled="true" httpsPorts="4567, 7654"/>--> 
    <add allowedDestination="http://www.nwebsec.com/"/> 
    <add allowedDestination="https://www.google.com/accounts/"/> 
</redirectValidation> 

헤더가 전송되기 전에 오류가 발생하여 오류가 발생합니다. 설명서에 나와있는 사용자 지정 오류로 인해 Response.Flush()를 호출 할 수 있습니다.

+0

팁 주셔서 감사합니다! 하지만 내 목표는 정말 위험한 리디렉션의 예외 처리를 설정하는 것입니다. 동일한 호스트에 있지 않은 위험을 화이트리스트에 표시하고 싶지 않습니다. 예를 들어 의도적으로 리디렉션 한 예에서 볼 수 있듯이 "http://www.deshow.net/d/file/travel/2010-04 /bing-landscape-wallpaper-845-2.jpg "시험을 위해서. 위험한 리디렉션이 감지되면 NWebSec은이 예외를 throw하고 global.asax에서 가져옵니다. 그런 다음 ErrorController의 RedirectError() 작업 메서드로 리디렉션해야합니다. –