Nunca pensé en preguntar esto, pero trabajo en un producto de seguridad, por lo que implementamos una protección bastante estricta contra XSS:
< y > en la entrada del usuario tanto del lado del servidor como del lado del cliente Todo esto es genial y elegante, excepto que daña la experiencia de usuario y es malo para el rendimiento. Seguramente, SEGURAMENTE, hay una manera de decirle al navegador que NO ejecute las etiquetas <script> agregadas después del análisis inicial del documento, ¿verdad? Usamos un flujo de trabajo integrado moderno y cualquier carga diferida de JavaScript se realizará a través de llamadas de import("/some/js/module") que se vuelven a basar en el paquete, pero nunca recibirán un valor dinámico en tiempo de ejecución.
Incluso si no hay una forma de decirle directamente al navegador que no se ejecute dinámicamente (mediante JS después de cargar la página) etiquetas <script> , ¿existe un flujo de trabajo probado y verdadero para renderizar, por ejemplo, Markdown + subconjunto HTML producido por el usuario? contenido en iframes? Estoy familiarizado con los iframes a un alto nivel, pero me refiero a que el documento/página principal puede manipular el contenido DOM del iframe o algo así, incluso si agrega una etiqueta <script> dentro del iframe, el código del script no tendrá acceso al entorno JS del documento principal?
En realidad, sería genial como una forma de espacio aislado para mostrar el contenido del usuario porque podrían incluir intencionalmente un script y crear un pequeño widget interactivo para que otros usuarios se metan, en teoría (tal vez una antifunción en la práctica).
Puedes hacerlo con CSP (Política de seguridad de contenido)
https://developers.google.com/web/fundamentals/security/csp#inline-code-considered-dañino
Ejemplo: Permitir solo:
<script nonce="EDNnf03nceIOfn39fn3e9h3sdfa"> // Some inline code I can't remove yet, but need to asap. </script>con
Content-Security-Policy: script-src 'nonce-EDNnf03nceIOfn39fn3e9h3sdfa'Comience bloqueando todo con:
default-src 'none'