A potentially dangerous Request.Form value was detected from the client - come risolvere

System.Web.HttpException (0x80004005): The application is configured to issue secure cookies - Cause e soluzioni del problema

Se sviluppate in ASP.NET e fate largo uso di webservice e/o form HTML vi sarete senz'altro imbattuti nel problema di far "digerire" al metodo di un Controller (o a una pagina ASPX, se lavorate ancora in ASP.NET Forms) caratteri potenzialmente pericolosi. L'errore che viene riportato è il seguente:

A potentially dangerous Request.Form value was detected from the client

Questo errore, come detto, viene prodotto quando vengono passati parametri GET/POST contenenti caratteri giudicati da ASP.NET potenzialmente pericolosi, quali ad esempio parentesi HTML, carattere percentuale, virgolette e via dicendo. Di seguito sono elencati i workaround che consentono di risolvere il problema, con la inevitabile raccomandazione di applicarli solo a patto di avere la piena consapevolezza delle implicazioni di sicurezza che comportano in termini di esposizione a possibili attacchi XSS (Cross-Site Script): per maggiori informazioni al riguardo consigliamo di leggere con grande attenzione questo articolo e questa voce Wikipedia, oltre all'ottima panoramica fornita dal sito ufficiale ASP.NET a riguardo.

Se siete certi di aver compreso l'argomento e volete comunque procedere, continuate a leggere.

ASP.NET MVC

Se il progetto a cui state lavorando è ASP.NET MVC 4 (o superiore) o ASP.NET Web API, potete disabilitare il controllo di validazione dell'input aggiungendo l'attributo [ValidateInput(false)]  al metodo che riceve il GET/POST: si tratta indubbiamente del workaround più semplice e sicuro per i progetti di questo tipo, in quanto non espone l'intero sito ma unicamente il metodo che vi crea difficoltà. Nel caso in cui il progetto fosse realizzato con MVC v3 o inferiore, l'attributo da utilizzare è [AllowHtml] .

ASP.NET Forms

Se state ancora utilizzando ASP.NET Forms, dovete intervenire a livello di pagina aggiungendo l'attributo validateRequest="false"  alla direttiva <%@ Page ... %>  all'inizio della pagina .aspx interessata. La riga, nella sua interezza, avrà un aspetto di questo tipo:

<%@ Page validateRequest="false" %>

Anche in questo caso si tratta del workaround più semplice e sicuro per i progetti di questo tipo, in quanto espone unicamente la pagina interessata.

Disattivare il controllo a livello globale

Se i workaround precedenti non funzionano, o se la modifica riguarda troppi metodi o pagine, esiste la possibilità di disabilitare la validazione degli input a livello di progetto. Per farlo, è necessario aggiungere l'attributo validateRequest="false"  all'elemento  <pages>  contenuto nel file web.config del progetto all'interno della sezione  <system.web> , nel seguente modo:

IMPORTANTE: Se si utilizza ASP.NET v4.0 o superiore, è possibile che - per disabilitare la validazione a livello globale o di singola cartella - sia necessario aggiungere anche la seguente riga al file web.config del progetto, sempre all'interno della sezione  <system.web> :

Tenete presente che questa istruzione imposta una modalità di validazione delle request meno efficiente di quella normalmente prevista da ASP.NET 4, che potrebbe avere un impatto non indifferente sulle performance del sito: per questo motivo suggeriamo di inserirla solo se non avete alternative.

Per il momento è tutto: felice sviluppo... e occhio agli attacchi XSS!

About Ryan

IT Project Manager, Web Interface Architect e Lead Developer di numerosi siti e servizi web ad alto traffico in Italia e in Europa. Dal 2010 si occupa anche della progettazione di App e giochi per dispositivi Android, iOS e Mobile Phone per conto di numerose società italiane. Microsoft MVP for Development Technologies dal 2018.

View all posts by Ryan

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *


The reCAPTCHA verification period has expired. Please reload the page.

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.