Nueva expresión de código en ASP.NET 4.0


Algunos sitios ASP.NET (especialmente con ASP.NET MVC) dependen del uso de expresiones de código <%= expresion %> (aka "code nuggets") para escribir algún texto en el response. Cuando utilizamos estas expresiones, es fácil olvidar "codificar" el texto en HTML (HTML Encoding). Si el texto viene por una entrada de datos del usuario, esto deja la puerta abierta a un ataque XSS (Cross Site Scripting).

Con ASP.NET 4.0 se introduce la siguiente nueva sintaxis para expresiones de código:

<%: expresion %>

(observa el cambio de "=" por ":")

Esta nueva sintaxis realiza "codificación" HTML de forma predeterminada cuando escribe hacia el response, por lo que esta nueva expresión se traduce a:

<%= HttpUtility.HtmlEncode(expresion) %>

Así por ejemplo <%: Request["UserInput"] %> realizará HTML Encode al valor de Request["UserInput"].

El objetivo de ésta característica es el que sea posible remplazar todas las instancias de la vieja sintaxis con la nueva. No obstante, existen casos en que el texto a poner en la salida está pensado para que se entienda como HTML, o bien ya ha sido previamente "codificado", y en cuyo caso se realizaría una doble "codificación".

Para esos casos, ASP.NET 4.0 introduce también una nueva interfaz: IHtmlString, junto con una implementación concreta: HtmlString. Las instancias de este tipo permitirán indicar que el valor devuelto ya ha sido "codificada" (o bien que ya a sido examinado) para desplegarse como HTML, por lo que entonces el valor ya no será "codificado". Por ejemplo:

<%: new HtmlString("<strong>HTML que no será encoded</strong>") %>

Los métodos auxiliares de ASP.NET MVC 2 han sido actualizados para trabajar con esta nueva sintaxis por lo que no son doblemente "codificados", pero únicamente cuando se ejecuta en ASP.NET 4.0. Esta nueva sintaxis no funciona cuando la aplicación utiliza ASP.NET 3.5 SP1 (que en realidad usa el motor de ASP.NET 2.0).

Así mismo, esta sintaxis no realiza JavaScript Encoding, como cuando se crean cadenas JavaScript basadas en entradas de datos del usuario.

Mayor información:

Acerca de Willy Mejia

Developer, Techie, Human... http://about.me/willyxoft
Esta entrada fue publicada en ASP.NET, NetFx4. Guarda el enlace permanente.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s