2011-03-29 2 views
3

내 인터넷 사이트에서 해킹을하는 중에 일반적인 문제가 발생했습니다.더 좋은 오류를 표시하는 방법 : "잠재적으로 위험한 Request.Form 값이 클라이언트에서 감지되었습니다"

ASP를

은 ": A potentially dangerous Request.Form value was detected from the client (Firstname ="<script> alert("x");...").

경우 2 A potentially dangerous Request.Form value was detected from the client (*). 잠재적으로 위험한으로 Request.Form 값은 그것이 XSS 시도하거나 악성 문자

케이스 (1) 일 수있는 클라이언트로부터 검출 된" mvc 팀은 나를 위해 오류를 잡는 데 성공했지만 어떻게하면 사용자에게 더 좋은 오류를 보여줄 수 있습니까? 예를 들어 "뭔가 잘못 됐습니다.이 메시지가 다시 나타나는 경우 단계 x을 반복하십시오. 연락주세요. x ...".

asp MVC 개발자 용 솔루션.

  1. 당신의 Web.config에 다음 행을 추가 인덱스와 함께 ErrorController 만들기 :

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

  1. 쓰기 테스트는 컨트롤러의 동작을 확인 할 수 있습니다.
  2. 실제보기를 만드는 것을 잊지 마십시오. 옵션

당신은 속성에 CustomErrors에 대한 자세한 내용은 = "RemoteOnly"

주 모드를 넣을 수 있습니다 customErrors Element

+0

MVC가 아닙니다. WebForms도 마찬가지입니다. 두 프레임 워크는 동일한 코드를 사용합니다. – Steven

+0

내 나쁜, 지금 retagging – David

+0

IIS7 +를 사용하는 경우 여기에 더 간단한 해결책이 있습니다 : - http://stackoverflow.com/questions/30071341/asp-net-mvc-customerror-page-doesnt-get-displayed-for -some-the-400-errors/30072933 # 30072933 –

답변

6

그것은 MVC 특정 아니다. ASP.Net webforms는 동일한 오류를 줄 것입니다.

사용자 정의 오류 페이지를 사용해야합니다. 당신은 당신이 원하는대로 할 Global.asax에함으로써 Application_Error 이벤트를 처리 할 수 ​​있습니다, 또한 http://aspnetresources.com/articles/CustomErrorPages

방문, 사용자 지정 오류 페이지에 대한 자세한 내용은

<customErrors mode="RemoteOnly" defaultRedirect="~/Error.aspx"/> 

: 사용자 정의 오류 페이지처럼의 Web.config에 정의되어 있습니다.

마이크로 소프트는 당신이하고 싶은 것과 정확히하고 싶은 것을하는 소스 코드를 포함한 매우 훌륭한 기사를 가지고 있습니다. 여기 http://support.microsoft.com/kb/306355

+0

올바른 방향으로 안내해 주셔서 감사합니다! – David

+0

문제 없습니다. 그리고 행운을 빌어. – Kamyar

1

에서 그것을 확인하는 것은 MVC 특정입니다 또 다른 방법이다 :

  • 는 FilterAttribute 내부에서 IExceptionFilter
  • 를 구현하는 사용자 지정 FilterAttribute 만들기, 당신이 사용하는 컨트롤러 또는보기로 리디렉션 할 수 있습니다 오류를 표시합니다.
  • 글로벌에 필터를 등록하십시오.asax 또는 컨트롤러 특성

이렇게하면 HttpRequestValidationException에 대해서만 다른 오류 페이지를 표시 할 수 있다는 이점이 있습니다.

public class HttpRequestValidationExceptionAttribute : FilterAttribute, IExceptionFilter { 
    public void OnException(ExceptionContext filterContext) { 
     if (!filterContext.ExceptionHandled && filterContext.Exception is HttpRequestValidationException) { 
      filterContext.Result = new RedirectResult("~/HttpError/HttpRequestValidationError"); 
      filterContext.ExceptionHandled = true; 
     } 
    } 
} 
관련 문제