/ / Jak więc pokazać ładniejszy błąd: „Potencjalnie niebezpieczne żądanie. Wykryto wartość formularza od klienta” - asp.net, obsługa błędów, bezpieczeństwo, asp.net-mvc

Jak pokazać ładniejszy błąd: "Potencjalnie niebezpieczna wartość Request.Form została wykryta przez klienta" - asp.net, obsługa błędów, bezpieczeństwo, asp.net-mvc

Podczas hakowania na własnej stronie napotkałem (po pewnym googlowaniu) częsty problem.

„Potencjalnie niebezpieczne żądanie. Wartość klienta została wykryta przez klienta, może to być próba XSS lub złośliwy znak

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

przypadek 2: A potentially dangerous Request.Form value was detected from the client (*)."

Zespół asp mvc wykonał dobrą robotę, łapiącbłąd dla mnie, ale jak mogę pokazać lepszy błąd moim użytkownikom. na przykład „Coś się stało, proszę powtórzyć swoje kroki, jeśli ta wiadomość pojawi się ponownie, prosimy o kontakt z osobą x ...”.

Rozwiązanie dla programistów asp MVC.

  1. Utwórz ErrorController z indeksem
  2. Dodaj następujący wiersz do pliku web.config:

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

  1. Napisz testy, aby sprawdzić działanie kontrolera.
  2. Nie zapomnij utworzyć rzeczywistego widoku.

Opcjonalnie możesz ustawić tryb = "RemoteOnly"

Uwaga, aby uzyskać więcej informacji na temat atrybutów CustomErrors: element customErrors

Odpowiedzi:

6 dla odpowiedzi № 1

Nie jest to specyficzne dla MVC. Formularze internetowe ASP.Net dają ten sam błąd.

Myślę, że powinieneś użyć niestandardowych stron błędów. Niestandardowe strony błędów są zdefiniowane w pliku Web.config, np .:

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

Więcej informacji na temat niestandardowych stron błędów można znaleźć na stronie http://aspnetresources.com/articles/CustomErrorPages

Ponadto możesz obsłużyć zdarzenie Global.asax Application_Error, aby zrobić, co chcesz.

Microsoft ma bardzo fajny artykuł zawierający kod źródłowy, który robi dokładnie to, co chcesz robić (i więcej). sprawdź to na http://support.microsoft.com/kb/306355


1 dla odpowiedzi nr 2

Oto inny sposób specyficzny dla MVC:

  • Utwórz niestandardowy atrybut FilterAttribute, który implementuje IExceptionFilter
  • z poziomu FilterAttribute możesz przekierować do kontrolera lub wyświetlić, aby wyświetlić błąd.
  • zarejestruj filtr w Global.asax lub przypisz kontrolerom

Ma to tę zaletę, że można wyświetlić inną stronę błędu tylko dla wyjątku 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;
}
}
}