Utilizzare l’AntiXss Library per l’AutoEncode di ASP.NET / MVC2 con il .NET Framework 4.0

Con il .NET Framework 4.0 è stato introdotto l’AutoEncode per i codeblocks di ASP.NET/MVC, come già detto qui; proprio in quel post concludevo dicendo:

Sarebbe bello poter specificare un provider per cambiare il sistema di encoding, e magari anche sostituire l’HtmlEncode della classe HttpUtility con quello della Anti-XSS.

ed ho scoperto da poco che la cosa è realmente fattibile.

Per realizzare ciò il lavoro è piuttosto semplice, sono sufficienti pochi passaggi per poter estendere l’HtmlEncode offerto dalla classe HttpUtility con quello più affidabile offerto dalla AntiXss Library.

Per prima cosa è necessario creare una classe che eredita da System.Web.Util.HttpEncoder e che effettua l’override degli opportuni metodi, sostituendo ed implementando l’HtmlEnoding con l’AntiXss Library, come mostrato di seguito:

public class AutoEncodeWithAntiXss : 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));
    }
}

Come ultimo step è necessario registrare la nostra classe nel web.config e, dal quel momento in poi, tutto ciò che utilizza l’autoencode introdotto con ASP.NET 4.0 utilizzerà la nostra classe.

<system.web>
    <httpRuntime encoderType="Imperugo.Web.Test.AutoEncode.AntiXSS.AutoEncodeWithAntiXss, Imperugo.Web.Test.AutoEncode.AntiXSS"/>

La classe System.Web.Util.HttpEncoder permette di effettuare l’ovveride di altri metodi, come l’HtmlDecode, ma l’AntiXss Library non supporta l’HtmlDecode; per questo motivo non è stato effettuato l’override.

Ciauz


Comments