Si necesito cargar algún contenido HTML externo que no sea de confianza y representarlo en el DOM, ¿el uso de la propiedad innerHTML será una protección adecuada contra scripts maliciosos?
A través de mis propias pruebas y este artículo , las etiquetas <script> dentro de HTML que se configuran a través de innerHTML interno en un elemento existente en el DOM (principal o oculto) no se ejecutan. Entonces, incluso si el script está allí, ¿ejecutarlo no evitaría riesgos de seguridad?
Como medida adicional, también puede ayudar encontrar todas las etiquetas <script> y eliminarlas en el DOM. ¿Es esto necesario?
No, eso no es lo suficientemente bueno. Los controladores en línea aún pueden ejecutarse, en particular, aquellos que se ejecutarán de inmediato. Por ejemplo:
const untrustworthyContent = ` <div> <img src onerror="alert('evil');"> </div> `; document.querySelector('div').innerHTML = untrustworthyContent; <div></div>Y cualquier cosa se puede poner en un atributo de controlador en línea de este tipo, incluida la carga de otros scripts maliciosos.
Como medida adicional, también puede ayudar a encontrar todas las etiquetas y eliminarlas en el DOM. ¿Es esto necesario?
Lo mejor es hacerlo a fondo. Elimine todas las etiquetas <script> y los controladores en línea incluso antes de pensar en renderizar.