Mi proyecto tiene un panel de administración y una página principal. En el panel de administración, puedo crear publicaciones usando el editor HTML (VueEditor en este ejemplo) que en la base de datos se ve así:
<p>Here is some test text from VueEditor</p>
Luego, quiero analizarlo en la página principal, pero, por supuesto, sin la etiqueta <p> , así que uso esto:
<p v-html='item.plot'></p>
Y aquí hay un problema, IDE dice:
ESLint: 'v-html' directive can lead to XSS attack.(vue/no-v-html)
¿Es esto realmente tan peligroso? ¿Debería analizarlo de otra manera?
Sí, es realmente tan peligroso.
Considere lo que sucede cuando creo la publicación.
Hi I'm Dave this is my <script>alert('pwned,' + document.cookie)</script> post!Ahora puedo ejecutar un código JS arbitrario en su sitio web y robar la información de inicio de sesión para cada usuario al que le sirva este código también.
No estoy muy familiarizado con vue en particular, pero la mayoría de los marcos tienen una manera fácil de generar html desinfectado. Creo que esto es {{ itme.plot }} en vue. Esto no generará una etiqueta real (o cualquier otra etiqueta), sino una versión escapada <script> que el navegador no interpretará como código real.
Hay un millón de otras formas de hacer XSS si me dejas inyectar mi propio HTML en tu sitio web.