Permitir SVG en WordPress sin control puede abrir la puerta a código malicioso, XSS, enlaces externos o recursos incrustados. Aunque son útiles para logotipos e iconos por su calidad y ligereza, un SVG es un archivo XML y debe tratarse como contenido potencialmente ejecutable.
Los problemas con SVG y seguridad se evitan al sanear los archivos, limitar quién puede cargarlos y elegir una inserción segura.
Índice
Anuncio
Revisa el SVG antes de permitir su subida
Un SVG seguro debe contener únicamente el dibujo necesario, sin scripts, eventos, objetos, entidades XML ni referencias remotas.
WordPress bloquea los SVG por defecto porque permitir la extensión no equivale a revisar el contenido: la validación confirma el formato y la sanitización elimina elementos peligrosos.
Elementos que deben desaparecer
Revisa el archivo con un editor de texto y elimina cualquier código que no sea imprescindible para dibujar el gráfico.
- Elimina etiquetas
<script>,<iframe>,<object>y formularios incrustados. - Borra atributos que empiecen por
on, comoonload,onclickuonerror. - Retira
foreignObject, porque permite incluir HTML dentro del dibujo. - Quita
DOCTYPE, entidades XML y comentarios que no tengan una función clara. - Elimina animaciones, metadatos y capas ocultas si no son necesarias para el resultado visible.
Enlaces externos que no debes aceptar
Busca href, xlink:href, src y url(), porque un SVG no debería descargar imágenes, fuentes o estilos desde dominios externos para mostrarse correctamente.
Un SVG que necesita conectarse a otra web antes de mostrarse no es un archivo listo para publicar: necesita una revisión técnica.
Prueba visual tras limpiar el archivo
Sanea el SVG con una herramienta mantenida, reduce código sobrante con SVGO y pruébalo en staging mediante img o CSS; revisa su aspecto, el viewBox, las peticiones de red y el texto alternativo.
Los riesgos no son todos iguales. Un caso de XSS almacenado ocurre si un atacante sube un SVG con JavaScript o atributos onload y ese contenido se inserta posteriormente como SVG inline o se abre en un contexto que permite su ejecución. Las referencias a imágenes, fuentes o estilos remotos pueden revelar la IP, el navegador y la página desde la que se carga el recurso.
También existe el phishing visual: un archivo puede imitar un botón, un formulario de acceso o un aviso de seguridad para inducir clics. DOCTYPE y las entidades XML deben eliminarse porque algunos analizadores, conversores o procesos automatizados pueden intentar resolverlas y consumir recursos o acceder a referencias no deseadas.
No actives SVG para todos
Si autores, clientes, colaboradores o cuentas temporales acceden a la biblioteca multimedia, no habilites SVG para todos: el principio de mínimo privilegio exige que cada cuenta tenga solo los permisos necesarios.
Un XSS almacenado puede activarse cuando un administrador abre un archivo o contenido comprometido, por lo que toda subida debe tratarse como no fiable hasta validarla y sanearla.
Roles que pueden cargar SVG
Permite SVG solo a administradores y, si es necesario, a perfiles técnicos internos verificados; revisa periódicamente cuentas antiguas, permisos puntuales y credenciales compartidas.
| Rol o situación | ¿Permitir SVG? | Control mínimo |
|---|---|---|
| Administrador técnico | Sí | Sanitización y revisión previa |
| Diseñador interno verificado | Sí, con revisión | Carpeta o flujo de aprobación |
| Editor, autor o cliente | No | PNG, WebP o envío al equipo técnico |
| Usuario sin verificar | No | Bloqueo de subida y revisión de cuenta |
El error de añadir solo el MIME
Para habilitar SVG no basta con añadir image/svg+xml a los tipos MIME: el permiso debe estar separado de la sanitización de SVG. Un plugin fiable puede aceptar el formato, limpiar etiquetas y atributos peligrosos y restringir la carga a administradores; antes de instalarlo, conviene comprobar que se mantiene, explica qué elementos elimina y funciona con la versión actual de WordPress. En código personalizado, el filtro de tipos MIME debe aplicarse solo tras verificar una capacidad específica con current_user_can() y complementarse con un filtro previo de subida que ejecute la validación de archivos y el sanitizador.
Plugin, código o bloquear SVG
Un plugin puede ser adecuado si tiene mantenimiento activo, sanea el contenido y limita capacidades; el código personalizado solo sirve si también mantiene validación, sanitización y permisos.
Una llave de seguridad FIDO2 ayuda a proteger la cuenta de administrador que aprueba y sube archivos sensibles. Añade una segunda prueba física al acceso, incluso si una contraseña se filtra.
- Reduce el riesgo de acceso a la biblioteca multimedia con credenciales robadas
- Protege cuentas de administrador que gestionan plugins, copias y permisos
- Evita depender solo de códigos SMS para confirmar inicios de sesión
Así, los permisos de usuario impiden que autores o clientes conviertan la biblioteca multimedia de WordPress en un canal de archivos no revisados.
Anuncio
Inserta SVG con img o CSS y evita object
Para logotipos e ilustraciones sin interacción, usa <img> o background-image en CSS después de sanear el archivo.
El SVG inline ofrece más control visual, pero aumenta la superficie de exposición; object e iframe cargan el SVG como documento separado y deben evitarse.
Comparativa de métodos de inserción
| Método | Riesgo tras saneamiento | Uso recomendado |
|---|---|---|
img | Bajo | Logos e ilustraciones con texto alternativo |
CSS background-image | Bajo | Gráficos decorativos sin contenido textual |
| SVG inline | Medio | Iconos propios auditados que requieren estilos |
object o iframe | Alto | Evitar en webs corporativas habituales |
Accesibilidad según el uso del archivo
Un logotipo con img necesita texto alternativo identificativo, mientras que un icono decorativo puede usar un texto alternativo vacío para no repetir información al lector de pantalla.
Qué no resuelve una CSP
Una Content Security Policy limita los orígenes desde los que el navegador carga recursos, pero no limpia el SVG ni convierte un archivo dudoso en seguro; úsala como barrera adicional y pruébala en staging.
Una CSP útil debe expresarse como cabecera y adaptarse a los recursos reales del sitio. Para una web que sirve SVG saneados desde su propio dominio, una base prudente puede incluir default-src 'self', img-src 'self' data:, object-src 'none', frame-src 'none', connect-src 'self' y base-uri 'self'; si no se necesita JavaScript inline, script-src 'self' evita ampliarlo innecesariamente. object-src 'none' bloquea la carga mediante object y embed, mientras que connect-src limita conexiones iniciadas desde contenido activo.
La política debe probarse primero en modo de solo informe o en staging, ya que una directiva demasiado restrictiva puede romper fuentes, analítica, vídeos o recursos legítimos.
Evita XSS con saneamiento, pruebas y copias
El flujo seguro debe ser siempre el mismo: recibir, inspeccionar, sanear, reducir, probar y publicar, sin excepciones por urgencia.
Las copias de seguridad son el último recurso: conserva archivos y base de datos verificados, y prueba la restauración periódicamente en un entorno aislado.
Flujo reproducible para cada archivo
- Recibe el SVG desde una fuente identificada y guarda el original fuera de la web pública.
- Inspecciona el XML y elimina scripts, eventos,
foreignObject, entidades y enlaces externos. - Sanea el archivo con una herramienta mantenida y reduce código sobrante con SVGO.
- Prueba el SVG en staging mediante
imgo CSS, no medianteobject. - Revisa el resultado visible, las peticiones de red y el texto alternativo antes de publicarlo.
Señales de que debes investigar
Investiga SVG inusualmente pesados, con texto ilegible, peticiones a dominios desconocidos, redirecciones o cambios inesperados en usuarios; si sospechas de XSS, retira el archivo y revisa las sesiones con privilegios.
Qué hacer ahora para usar SVG con control
Permite SVG solo a uno o dos administradores técnicos, aplica sanitización y muéstralos mediante img; si no puedes explicar quién lo subió, de dónde procede y cómo se probó, no debe publicarse.
Anuncio
Preguntas y respuestas
¿Es seguro subir SVG a WordPress?
Sí, si se sanea antes de subirlo, procede de una fuente identificada y solo lo cargan perfiles técnicos de confianza.
¿Por qué WordPress bloquea los SVG?
Porque pueden incluir XML activo, JavaScript o atributos de evento que faciliten XSS.
¿Qué debo borrar de un archivo SVG?
Borra script, atributos on*, foreignObject, iframe, entidades XML y enlaces externos innecesarios.
¿Qué método es más seguro para mostrar SVG?
img suele ser la opción más prudente para SVG ya saneados; CSS encaja en elementos decorativos.
¿Un plugin para SVG protege todos los archivos?
No siempre: comprueba que sanea el contenido, limita roles, está actualizado y es compatible con tu WordPress.
¿La CSP evita ataques desde SVG?
No sustituye la sanitización; solo limita recursos, scripts, conexiones y marcos no autorizados.
¿Los SVG pueden afectar al RGPD?
Sí, si cargan recursos externos que envían datos de navegación a terceros; elimina esas referencias y revisa el cumplimiento del RGPD.
- Con 1.000 productos, salva pedidos en Woo: nube o local
- Mantenimiento WordPress ante 2.000 webs hackeadas
Josu Barrios
Somos especialistas en mantenimiento WordPress para empresas, profesionales y tiendas online. Contamos con experiencia en seguridad web, optimización de rendimiento, actualizaciones, copias de seguridad y resolución de incidencias técnicas, ayudando a que cada sitio funcione de forma rápida, estable y protegida. Nuestro enfoque combina soporte técnico profesional, buenas prácticas de seguridad y seguimiento continuo para ofrecer un servicio fiable, transparente y orientado a resultados reales.