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