Solutie pentru “A potentially dangerous Request.Form value was detected from the client…”

Aceasta eroare este intalnita in cazul aplicatiilor Web, dezvoltate cu tehnologie ASP.NET. In momentul in care pagina revine la server pentru a fi prelucrata este generata o exceptie de tipul

[HttpRequestValidationException (0x80004005):
A potentially dangerous Request.Form value was detected from the client (…).]

care implicit nu este gestionata la nivel de pagina sau aplicatie Web.
Exceptia este generata la nivel de date de intrare pentru ca platforma .NET (incepand cu 1.1) realizeaza validarea input-ului utilizatorului pentru a preveni atacuri de tip JavaScript Injection (vezi post-ul )prin care se incearca introducerea de siruri de caractere cu forma <text> (care pot reprezenta si simple secvente HTML).
Solutii pentru aceasta eroare:

  • instruirea utilizatorilor pentru a evita introducerea de texte care sa contina siruri de caractere cu formatul <text>;
  • dezactivarea validarii la nivel de pagina prin inserarea atributului ValidateRequest=”false” in sectiunea <%@ Page … > din pagina ASP.NET
<%@ Page Language="C#" AutoEventWireup="true" ValidateRequest="false" %>
  • dezactivarea validarii la nivel de aplicatie prin inserarea in fisierul web.config (sectiunea <system.web>) a atributului
 
  • gestiunea erorii la nivel de pagina (prin metoda Page_Error) sau la nivel de aplicatie Web (in Global.asax prin metoda Application_Error) unde sa se faca redirectarea catre o pagina generala de afisare a erorilor; exceptia nu poate fi captata (…sau nu vad eu cum sa fac acest lucru) deoarece nu este generata intr-o secventa a programului care sa se gaseasca intr-un bloc try-catch; pentru metode de gestiune a erorilor la nivel de aplicatie Web ASP.NET o sa revin cu un alt post.

A doua solutie trebuie completata cu rutine de validare a datelor de intrare pentru a nu permite atacuri de tip JavaScript Injection. Pentru tehnologia ASP.NET se poate utiliza metoda Server.HtmlEncode() pentru a stoca in format HTML caracterele speciale (de exemplu < este transformat in &lt; iar > in &gt;).

Alte surse pe aceasta tema: