Safe SVG

Descrición

Safe SVG é a mellor forma de permitir as subidas de SVG en WordPress!

Dáche a posibilidade de permitir as subidas de SVG asegurándote de que se sanean para deter as vulnerabilidades SVG/XML que afectan ao teu sitio. Tamén che permite previsualizar os SVG subidos na biblioteca de medios en todas as vistas.

Características actuais

  • SVG saneados – Non abras buracos de seguridade no teu sitio WordPress permitindo subir arquivos sen sanear.
  • Optimización con SVGO – Pasa os teus SVG pola ferramenta SVGO ao subilos para aforrar espazo. Esta característica está desactivada por defecto, pero pódese activar engadindo o seguinte código: add_filter( 'safe_svg_optimizer_enabled', '__return_true' );
  • Ve os SVG na biblioteca de medios – Acabáronse os días de adiviñar cal é o SVG correcto: activamos as vistas previas de SVG na biblioteca de medios de WordPress.
  • Elixe quen pode subir – Restrinxe as subidas de SVG a determinados usuarios do teu sitio WordPress ou permite que calquera poida subilos.

Inicialmente, unha proba de concepto para #24251.

O saneado de SVG faise mediante a seguinte biblioteca: https://github.com/darylldoyle/svg-sanitizer.

A optimización de SVG faise mediante a seguinte biblioteca: https://github.com/svg/svgo.

Técnico: seguridade das rutas de subida

A función _wp_handle_upload( $file, $action ) de WordPress admite calquera valor de $action, que determina o nome do gancho de filtro: {$action}_prefilter. Safe SVG engánchase a accións habituais como wp_handle_upload e wp_handle_sideload, pero non pode engancharse a accións personalizadas arbitrarias definidas por código de terceiros. Como as accións de subida non teñen límite e as autorizacións MIME son globais, non podemos garantir que o saneado cubra todas as rutas de subida posibles.

Blocks

Este plugin proporciona 1 bloque.

  • Safe SVG Display the SVG icon

Instalación

Instálao desde o directorio de WordPress ou descarga, descomprime e sube os arquivos ao teu directorio /wp-content/plugins/

Preguntas frecuentes

Podemos cambiar os atributos e as etiquetas permitidos?

Si, pódese facer usando os filtros svg_allowed_attributes e svg_allowed_tags.
Reciben un argumento que se debe devolver. Mira os exemplos de abaixo:

add_filter( 'svg_allowed_attributes', function ( $attributes ) {

    // Do what you want here...

    // This should return an array so add your attributes to
    // to the $attributes array before returning it. E.G.

    $attributes[] = 'target'; // This would allow the target="" attribute.

    return $attributes;
} );


add_filter( 'svg_allowed_tags', function ( $tags ) {

    // Do what you want here...

    // This should return an array so add your tags to
    // to the $tags array before returning it. E.G.

    $tags[] = 'use'; // This would allow the <use> element.

    return $tags;
} );

Pode o meu tema darlle estilo a un SVG integrado?

Na maioría dos casos, si. O bloque SVG integrado renderiza dentro dunha raíz de sombra (shadow root) os SVG que levan o seu propio elemento <style>, porque se non o CSS dentro dun SVG integrado aplícase a toda a páxina en lugar de só ao SVG. As follas de estilos non poden acceder ao interior dunha raíz de sombra, polo que o CSS do tema, como .entry-content svg { fill: red; }, non se aplicará a eses SVG.

As propiedades herdadas seguen atravesando o límite, polo que funciona establecer color nun antecesor e usar currentColor dentro do SVG, igual que as propiedades personalizadas de CSS. Os SVG que non conteñen un elemento <style> renderízanse sen a raíz de sombra e pódense estilizar coas follas de estilos do tema.

Para desactivar o illamento, a costa de permitir que o CSS dun SVG afecte ao resto da páxina:

add_filter( 'safe_svg_inline_use_shadow_dom', '__return_false' );

Por que Safe SVG non activa globalmente as subidas de SVG?

Safe SVG só permite os SVG a través das rutas de subida que pode sanear activamente. Aínda que a maioría das subidas de WordPress usan funcións estándar como wp_handle_upload() (na que se engancha Safe SVG), os plugins e temas poden crear rutas de subida personalizadas chamando á función subxacente de WordPress _wp_handle_upload() con parámetros de acción arbitrarios.

Activar globalmente o tipo MIME image/svg+xml permitiría os SVG en todas as rutas de subida, incluídas as personalizadas que Safe SVG non pode interceptar nin sanear. Isto crearía vulnerabilidades de seguridade nas que se poderían subir SVG sen sanear que conteñan scripts maliciosos.

Esta é unha decisión de deseño deliberada: Safe SVG prioriza un saneado garantido fronte a unha ampla compatibilidade. Os SVG só se permiten cando podemos asegurar que son seguros.

Onde informo dos fallos de seguridade atopados neste plugin?

Informa dos fallos de seguridade atopados no código fonte do plugin Safe SVG a través do Programa de divulgación de vulnerabilidades de Patchstack. O equipo de Patchstack axudarache coa verificación e a asignación do CVE, e avisará aos desenvolvedores deste plugin.

Comentarios

6 de Agosto de 2026 1 resposta
Must use plugin, well maintained, installing almost every time and just now I've realized, that I didn't review it. Keep it up and thanks!
11 de Marzo de 2026 1 resposta
Needed SVG upload support, and this plugin did the job. Very lightweight and easy to use. No issues so far. Some additional settings would be nice, but overall, it's quite solid.
21 de Xuño de 2025 1 resposta
Would have given a 5 star, but it seems support is missing for the taxonomy / terms section (like in categories) upload for SVG images. Keep getting an error that the upload isn't supported. Hopefully this will be fixed in a future update. Will update once this is added. Cheers!
30 de Abril de 2025 1 resposta
Great plugin! very usefull, but please can you add the possibility to add an inline SVG on the block pasting svg code? Thanks!
Ler todas as 79 opinións

Colaboradores e desenvolvedores

“Safe SVG” é un software de código aberto. As seguintes persoas colaboraron con este plugin.

Colaboradores

“Safe SVG” foi traducido a 32 idiomas. Grazas aos desenvolvedores polas súas contribucións.

Traduce “Safe SVG” ao teu idioma.

Interesado no desenvolvemento?

Revisa o código, bota unha ollada aorepositorio SVN, ou subscríbete ao log de desenvolvemento por RSS.

Rexistro de cambios

2.5.1 – 2026-09-22

2.5.0 – 2026-09-07

  • Seguridade: Impedido o acceso directo aos arquivos PHP (props @mehrazmorshed, @dkotter via #300).
  • Seguridade: O bloque SVG integrado agora renderiza dentro dunha raíz de sombra os SVG que levan o seu propio elemento <style>, polo que o seu CSS se limita ao bloque en lugar de aplicarse a toda a páxina (props @darylldoyle, @dkotter, @jeffpaul, @peterwilsoncc via #328).
  • Seguridade: Actualizado enshrined/svg-sanitize de ^0.22.0 a ^1.0.0 para incorporar correccións de seguridade (props @dkotter, @jeffpaul, @peterwilsoncc via #327).
  • Engadido: Compatibilidade con ligazóns no bloque SVG integrado, incluíndo o campo do URL, o interruptor de nova pestana e as opcións rel nofollow/sponsored (props @vegetable-bits, @mgiannopoulos24, @jeffpaul, @thrijith, @peterwilsoncc, @dkotter, @pbiron via #315).
  • Engadido: Novo filtro safe_svg_inline_use_shadow_dom para controlar que SVG integrados se illan nunha raíz de sombra, e novo filtro safe_svg_inline_shadow_styles para axustar o CSS que se inxecta xunto a eles (props @darylldoyle, @dkotter, @jeffpaul, @peterwilsoncc via #328).
  • Engadido: Novo filtro safe_svg_remove_remote_references para eliminar dos SVG subidos as referencias remotas url(), @import e image-set(), xunto cos destinos href remotos. Está desactivado por defecto, porque hai SVG lexítimos que fan referencia a fontes e imaxes remotas, pero podes usar este filtro para activalo (props @darylldoyle, @dkotter, @jeffpaul, @peterwilsoncc via #328).
  • Engadido: Engadida a compatibilidade co plugin Enable Media Replace (props @gthayer, @jeffpaul, @peterwilsoncc via #285).
  • Cambiado: Subida a versión mínima compatible de WordPress á 6.9 (props @zamanq, @peterwilsoncc via #320).
  • Cambiado: Actualizada a cabeceira «tested up to» para indicar a compatibilidade con WordPress 7.1 (props @navi151, @peterwilsoncc, @dkotter, @jeffpaul, @zamanq via #290, #311, #320).
  • Cambiado: O CSS do tema xa non pode apuntar a un SVG integrado que leve o seu propio elemento <style>, porque as follas de estilos non poden acceder ao interior dunha raíz de sombra. Dálles estilo a eses SVG desde o propio SVG ou desactiva o comportamento co filtro safe_svg_inline_use_shadow_dom. As propiedades herdadas, incluídas color/currentColor e as propiedades personalizadas, seguen aplicándose como antes, e os SVG sen un elemento <style> non se ven afectados (props @darylldoyle, @dkotter, @jeffpaul, @peterwilsoncc via #328).
  • Cambiado: Actualizado o arquivo blueprint para as vistas previas en directo de WordPress.org (props @fellyph, @jeffpaul, @peterwilsoncc via #287).
  • Cambiado: Actualizado svgo da 3.2.0 á 3.3.5 (props @dependabot[bot], @jeffpaul, @peterwilsoncc, @dependabot via #309).

2.4.0 – 2025-09-22

Consulta aquí os detalles do rexistro de cambios histórico.