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
-
Si, pódese facer usando os filtros
svg_allowed_attributesesvg_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
colornun antecesor e usarcurrentColordentro 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+xmlpermitirí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
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
- Engadido: Novo punto de acceso REST,
/safe-svg/v1/svg/ATTACHMENT-ID, ao que se lle pode pasar o ID dun adxunto SVG e que devolve o código saneado (props @dkotter, @peterwilsoncc via GHSA-3hhm-5qc9-q4xf). - Eliminado: Elimínase a propiedade
$sanitizerda clasesafe_svg. Se usas directamente a clasesafe_svgpara acceder á propiedade$sanitizer, terás que actualizar o teu código para usar no seu lugar a nova claseSvg_Sanitizer(props @dkotter, @peterwilsoncc via GHSA-3hhm-5qc9-q4xf). - Seguridade: Resolto GHSA-qq4c-2xh7-x2wf (props @dhakalananda, @dkotter, @peterwilsoncc, @darylldoyle, @jeffpaul via GHSA-qq4c-2xh7-x2wf).
- Seguridade: Resolto GHSA-vcfp-vw5v-gc9c (props @spectreDeveloper, @dkotter, @peterwilsoncc, @darylldoyle, @jeffpaul via GHSA-vcfp-vw5v-gc9c).
- Seguridade: Resolto GHSA-3hhm-5qc9-q4xf (props @dkotter, @peterwilsoncc via GHSA-3hhm-5qc9-q4xf).
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-sanitizede^0.22.0a^1.0.0para 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_dompara controlar que SVG integrados se illan nunha raíz de sombra, e novo filtrosafe_svg_inline_shadow_stylespara axustar o CSS que se inxecta xunto a eles (props @darylldoyle, @dkotter, @jeffpaul, @peterwilsoncc via #328). - Engadido: Novo filtro
safe_svg_remove_remote_referencespara eliminar dos SVG subidos as referencias remotasurl(),@importeimage-set(), xunto cos destinoshrefremotos. 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 filtrosafe_svg_inline_use_shadow_dom. As propiedades herdadas, incluídascolor/currentColore 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
svgoda 3.2.0 á 3.3.5 (props @dependabot[bot], @jeffpaul, @peterwilsoncc, @dependabot via #309).
2.4.0 – 2025-09-22
- Engadido: Posibilidade de subir SVG desde máis lugares da administración (props @stormrockwell, @darylldoyle, @wpexplorer, @smerriman, @jeffpaul, @dkotter via #279).
- Cambiado: Engadido o argumento
$attachment_idaos filtrossafe_svg_use_width_height_attributesesafe_svg_dimensions(props @roborourke, @dkotter via #278). - Corrixido: Tipo de datos inconsistente ou incorrecto para o argumento
$svgnos filtrossafe_svg_use_width_height_attributesesafe_svg_dimensions(props @roborourke, @dkotter via #278).
