XSS fuera del DOM

1

Tengo el siguiente JS (usando jQuery por brevedad, pero no es necesario para la pregunta):

$("<i></i>").html(userInput);

¿Es posible que alguien ingrese alguna cadena, UserInput, de manera que ejecute con éxito un ataque XSS?

He intentado ingresar una etiqueta de secuencia de comandos con una alerta, pero no se ejecuta. Creo que porque el elemento está fuera del DOM XSS no funcionará, pero no pude encontrar ningún recurso para confirmar esto.

    
pregunta winhowes 03.02.2015 - 23:59
fuente

2 respuestas

1

Nunca evalúa entradas no confiables como HTML. Incluso si el DOM está desconectado (es decir, no está insertado en el documento), la evaluación de HTML todavía puede causar XSS. Su ejemplo específico puede ser explotado usando atributos del evento :

var userInput = '<img onerror="alert(\'XSS\')" src="bogusurl:">';
$("<i></i>").html(userInput);

Si realmente necesita analizar HTML no confiable en un navegador, use DOMParser API (con text/html ).

Otra forma de prevenir el ataque es usar una Política de seguridad de contenido Política de seguridad de contenido con una directiva script-src que excluye el token 'unsafe-inline' . Sin embargo, el CSP es solo un control de daños, y no debe utilizarse como sustituto del saneamiento adecuado de las entradas.

    
respondido por el Rob W 21.02.2015 - 23:45
fuente
0

Esta forma de XSS basado en DOM que se llama XSS auto-inflexionado , que puede ser explotado utilizando Clickjacking . Se basa en DOM, porque JavaScript introdujo la vulnerabilidad XSS después de que el navegador representó el HTML estático.

Aunque puede ser difícil explotar xss autoinfligido, esta debilidad debe evitarse, use $('<i></i>').text(userInut) o escape the HTML .

    
respondido por el rook 04.02.2015 - 02:47
fuente

Lea otras preguntas en las etiquetas