Anti-XSS Library è uno degli strumenti più evoluti per evitare attacchi di tipo XSS (Cross Site Scripting) ai nostri siti Web, è parte di Web Protection Library ed è disponibile su CodePlex all'indirizzo
http://wpl.codeplex.com/
Essa fornisce tutta una serie di funzionalità per effettuare l'encoding di stringhe, che si basano sull'utilizzo di whitelist, ossia identificando i soli caratteri ritenuti sicuri, a differenza dell'encoder standard di ASP.NET che invece agisce sui caratteri ritenuti vietati (blacklisting).
Per effettuare l'encode di una stringa con Anti-XSS Library è sufficiente utilizzare uno dei metodi statici della classe AntiXss, a seconda della tipologia di output che vogliamo produrre. Ad esempio, nel caso di testo HTML possiamo scrivere
myLabel.Text = AntiXss.HtmlEncode("<b>Text</b> with invalid chars <script>");
Come abbiamo detto, ASP.NET espone già il metodo HttpUtility.HtmlEncode per svolgere un compito simile e, se il nostro scopo è adeguare un'applicazione preesistente ad Anti-XSS Library, presumibilmente avremo già centinaia di righe di codice di questo tipo, sparse per le varie classi del nostro progetto WebForms o di tag inline
<%: this.Model.SomeProperty %>
nelle view di ASP.NET MVC, che necessitano di essere modificate nella forma vista in precedenza.
Fortunatamente con ASP.NET 4.0 abbiamo la possibilità di realizzare un provider di encoding personalizzato e di iniettarlo nel runtime in maniera trasparente, semplicemente agendo sul file Web.Config. Il primo passo consiste nel realizzare una classe che derivi da HttpEncoder.
public class AntiXssEncoder : HttpEncoder { protected override void HtmlEncode(string value, TextWriter output) { output.Write(AntiXss.HtmlEncode(value)); } protected override void HtmlAttributeEncode(string value, TextWriter output) { output.Write(AntiXss.HtmlAttributeEncode(value)); } }
Successivamente, dobbiamo referenziare questa classe nel file di configurazione, all'interno del nodo System.Web.
<system.web> <httpRuntime encoderType="WebApplication1.AntiXssEncoder, WebApplication1"/> </system.web>
In questo modo, grazie alla nuova architettura di ASP.NET 4.0, tutte le chiamate ad HttpUtility.HtmlEncode verranno eseguite tramite il nostro nuovo provider, sfruttando quindi Anti-XSS Library. Quest'ultima verrà utilizzata anche nel caso di codice inline nelle pagine aspx o nelle view di ASP.NET MVC
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Chiamare un endpoint ASP.NET Core protetto da Certificate Authentication
Autenticazione basata su certificati con ASP.NET Core
Impostare il forward degli header in un sito ASP.NET Core dietro a un reverse proxy
Gestire dati sensibili nella configurazione in ASP.NET Core
Leggere i dati di configurazione di ASP.NET Core da Azure Key Vault
Usare Azure Application Gateway come reverse proxy per ASP.NET Core
Leggere la configurazione da Azure KeyVault con logica di retry in ASP.NET Core
Abilitare automaticamente Dependabot in tutti i repository di una organizzazione su GitHub