Per ragioni di sicurezza, in ASP.NET ogni richiesta effettuata al server è soggetto ad un processo di validazione; lo scopo è quello di evitare attacchi di cross-site scripting, sollevando un'eccezione nel caso in cui il contenuto sia giudicato potenzialmente pericoloso, ad esempio perchè composto da markup HTML. Ovviamente, in alcune pagine, può essere necessario accettare del markup (pensiamo ad esempio all'editor di un blog); ASP.NET 4.5 aggiunge diverse novità per rendere più semplice l'attivazione/disattivazione di questa funzionalità, che possono essere abilitate modificando il web.config come indicato in basso.
<httpRuntime requestValidationMode="4.5" />
Prima di questa versione, l'unica alternativa che avevamo per consentire l'input di markup HTML era quello di disabilitare la validazione sull'intera pagina. Ora, invece, tutti i controlli sono dotati di una proprietà ValidateRequestMode, che può essere impostata a uno di questi tre valori:
- Inherit (impostazione di default): il comportamento viene ereditato dal controllo parent;
- Enabled: il controllo effettua la validazione del contenuto;
- Disabled: il controllo non effettua la validazione del contenuto;
In questo modo abbiamo la possibilità di disabilitare la validazione in maniera selettiva, per esempio solo sui controlli su cui vogliamo consentire l'immissione del markup.
Un'altra novità è costituita, invece, dalla cosiddetta validazione "lazy", grazie alla quele il contenuto di una request viene verificato solo nel momento in cui effettivamente lo si utilizza:
var formValue = HttpContext.Current.Request["MyRequestKey"];
Il codice in alto, per esempio, ha l'effetto di scatenare la validazione della request solo ed esclusivamente per la chiave MyRequestKey. Eventualmente, è anche possibile accedere a questi valori senza che venga effettuata alcuna validazione sfruttando la proprietà Unvalidated:
var formValue = HttpContext.Current.Request.Unvalidated["MyRequestKey"];
In questo caso, ovviamente, è compito nostro assicurare la sicurezza del sistema, assicurandoci che il contenuto del dato che andiamo a leggere non sia dannoso.
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Usare lo spread operator con i collection initializer in C#
Migliorare l'organizzazione delle risorse con Azure Policy
Utilizzare il trigger SQL con le Azure Function
Eseguire query manipolando le liste contenute in un oggetto mappato verso una colonna JSON
Esportare ed analizzare le issue di GitHub con la CLI e GraphQL
Estrarre dati randomici da una lista di oggetti in C#
Usare i servizi di Azure OpenAI e ChatGPT in ASP.NET Core con Semantic Kernel
Usare un KeyedService di default in ASP.NET Core 8
Recuperare l'ultima versione di una release di GitHub
Miglioramenti nelle performance di Angular 16
Utilizzare Copilot con Azure Cosmos DB
Criptare la comunicazione con mTLS in Azure Container Apps