.NET proporciona más de 8 formas de codificar datos para evitar ataques XSS. ¿Cuál debo usar cuando? [cerrado]

2

Estoy buscando formas de usar .NET para prevenir ataques XSS y he encontrado los siguientes métodos para codificar datos:

        string asdf = WebUtility.UrlEncode(code);
        string asdf1 = HttpUtility.UrlEncode(code);
        string asdf1a = HttpUtility.UrlEncodeUnicode(code); // OBSOLETE
        string asdf1b = HttpUtility.UrlPathEncode(code);
        string asdf1c = Uri.EscapeDataString(code);
        string asdf1d = Uri.EscapeUriString(code);
        string asdf1e = HttpUtility.HtmlEncode(code);
        string asdf1f = HttpUtility.HtmlAttributeEncode(code);

(omití los métodos de byte [] ... pero hay más)

Dado que cada uno de estos métodos funciona de una manera completamente diferente, y se ubican en clases completamente diferentes, asumiría que es fácil causar un problema de XSS si se tiene la combinación incorrecta de opciones.

Para una situación dada, ¿cuándo es apropiado usar un método de codificación dado? ¿Por qué?

    
pregunta random65537 04.03.2014 - 15:59
fuente

1 respuesta

4

Esto es una especie de la fuente para prevenir XSS en ASP.NET (al menos de Microsoft):

Cómo: Prevenir las secuencias de comandos entre sitios en ASP.NET

Algunas cosas importantes que deben extraerse del artículo específico de su pregunta:

  • Utilice el método HttpUtility.HtmlEncode para codificar la salida si contiene información del usuario o de otras fuentes, como bases de datos .

  • use HttpUtility.UrlEncode para codificar URL de salida si están construidas a partir de la entrada .

Con respecto a HTMLAttributeEncode :

  • El método HtmlAttributeEncode convierte solo las comillas ("), ampersands (&) y los corchetes de ángulo izquierdo (<) en entidades de caracteres equivalentes. Es considerablemente más rápido que el% método HtmlEncode .

  • El resultado de la cadena del método HtmlAttributeEncode se debe usar solo para los atributos con comillas dobles . Pueden surgir problemas de seguridad al utilizar el método HtmlAttributeEncode con atributos de comillas simples.

Y finalmente, con UriEscapeString , use que si lo que está escapando es un URI . Esta pregunta de SO analiza la diferencia entre UriEscapeString y UriEscapeDataString .

    
respondido por el Gray 04.03.2014 - 16:49
fuente

Lea otras preguntas en las etiquetas