Prevención XSS y .innerHTML

Cuando permito a los usuarios insertar datos como argumento para el JSinnerHTML funciona así:

element.innerHTML = “User provided variable”;

Comprendí que para evitar XSS, tengo que codificar HTML y luego JS codificar la entrada del usuario porque el usuario podría insertar algo como esto:

<img src=a onerror='alert();'>

Solo la codificación HTML o solo JS no ayudaría porque el.innerHTML Como entendí, el método decodifica la entrada antes de insertarla en la página. Con la codificación HTML + JS, noté que el.innerHTML decodifica solo el JS, pero la codificación HTML permanece.

Pero pude lograr lo mismo mediante la doble codificación en HTML.

Mi pregunta es: ¿podría alguien proporcionar un ejemplo de por qué debería codificar HTML y luego codificar JS, y no codificar doblemente en HTML cuando utilizo el.innerHTML ¿método?

Respuestas a la pregunta(3)

Su respuesta a la pregunta