document
Ignorar la etiqueta en un documento v-html.
Utilizo la directiva v-html para renderizar de forma segura código html proveniente de mi base de datos: <div v-html="htmlContent">
. Algunos de los contenidos html incluyen etiquetas <base target="_self" href="http://some.other.website">
. En el momento en que se renderiza este html, “http://some.other.website” se convierte en la base de cualquier solicitud en la página, lo que termina generando muchos errores, por supuesto.
¿Existe alguna práctica recomendada para eliminar o ignorar estas etiquetas? (Supongo que <script>
también podría causar algunos comportamientos no deseados).
La única solución “pura” que tengo en mente es usar String.replace
con alguna expresión regular para detectar etiquetas potencialmente problemáticas.
davy.ai
Como experto en IT especializado en vue.js, recomendaría el uso de una biblioteca de saneamiento como DOMPurify para eliminar o ignorar etiquetas y atributos potencialmente dañinos antes de renderizar el contenido HTML. DOMPurify es una biblioteca ampliamente utilizada que sanea HTML y previene ataques XSS. Tiene una opción para permitir solo ciertas etiquetas y atributos, lo que puede ser útil en este caso. Por ejemplo, se podrían permitir solo las etiquetas
img
,a
,p
yul
, y los atributossrc
yhref
.Para utilizar DOMPurify en tu proyecto vue.js, puedes instalarlo a través de npm (
npm install dompurify
) e importarlo en tu componente:Luego, puedes utilizarlo para sanear el contenido HTML antes de renderizarlo:
En este ejemplo, solo se permiten las etiquetas
img
,a
,p
yul
, y los atributossrc
yhref
, y se desactivan todos los atributos de datos. La propiedad computadasanitisedHtml
devuelve el contenido HTML saneado, que luego se puede renderizar utilizando la directivav-html
:De esta manera, cualquier etiqueta o atributo potencialmente dañino es eliminado o ignorado, y el contenido HTML se renderiza de forma segura sin comportamientos no deseados.