¿Cómo se evitan las vulnerabilidades XSS en ASP.Net (MVC)?

Hace poco noté que tenía un gran agujero en mi aplicación porque había hecho algo como:

<input type="text" value="" /> 

Sé que debería haber usado Html.Encode , pero ¿hay alguna forma de hacerlo para todos los valores, sin tener que hacerlo explícitamente?

    Hay algunas maneras:

    • Use la syntax < %: %> en ASP.NET MVC2 / .NET 4.0. (Que es solo azúcar sintáctica para Html.Encode() )
    • Siga las instrucciones establecidas por Phil Haack donde detalla el uso de la biblioteca Anti-XSS como el motor de encoding ‘predeterminado’ para ASP.NET.

    Mire este video de Scott Hanselman y Phil Haack. Cubren XSS, CSRF, JSON Hijacking específicamente con ASP.Net MVC.

    En ASP.Net 4.0 o posterior, siempre use < %: ...%> en lugar de < % = ...%> … hace la encoding HTML por usted.

    La explicación de Scott Gu .

    Una vez hecho esto, es bastante sencillo grep su código para < % = regularmente como medida de seguridad.

    Además, ¿está utilizando la biblioteca Microsoft Anti-XSS ?

    Sintaxis para encoding HTML

    1. < %: model.something%> syntax en WebForms

    2. Es automático en Razor ie @modelo. Algo se autocodificará automáticamente sin necesidad de hacer nada para codificar.

    3. Los métodos MVC3 HTML Helper devuelven la cadena codificada automáticamente. por ejemplo, Html.Label devolverá la cadena codificada

    Más acerca de la creación de scripts entre sitios

    http://thirum.wordpress.com/2013/10/24/how-asp-net-mvc-prevents-cross-site-scriptingxss-attack/

    Etiquetas HTML potencialmente peligrosas:

    Aunque no es una lista exhaustiva, las siguientes tags HTML comúnmente utilizadas podrían permitir que un usuario malintencionado inyecte código de script:

          

    Un atacante puede usar atributos HTML como src, lowsrc, style y href junto con las tags anteriores para inyectar scripts de sitios cruzados. Por ejemplo, el atributo src de la etiqueta puede ser una fuente de inyección, como se muestra en los siguientes ejemplos.

        

    Un atacante también puede usar la etiqueta para inyectar una secuencia de comandos cambiando el tipo MIME como se muestra a continuación.