Rendere più sicuri i nostri siti ASP.NET 4.0 con Anti-XSS Library

di Marco De Sanctis, in ASP.NET 4.0,

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

Visualizza/aggiungi commenti

| Condividi su: Twitter, Facebook, LinkedIn

Per inserire un commento, devi avere un account.

Fai il login e torna a questa pagina, oppure registrati alla nostra community.

Approfondimenti

I più letti di oggi