Skip to content
KitploitKITPLOIT
HerramientasExploitsBlog
Log in
Enviar
HerramientasExploitsBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

FeedsContactoPrivacidad© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
svg-sanitizer — Biblioteca PHP que sanitiza SVG/XML no confiable filtrando etiquetas, atributos y referencias remotas para prevenir XSS e inyección de scripts en archivos SVG subidos o insertados en línea. | Kitploit
Herramientas/GitHubGitHub/darylldoyle/svg-sanitizer
Herramientas DefensivasAnálisis EstáticoAnálisis de VulnerabilidadesSeguridad WebUtilidades y Frameworks
GitHubdarylldoyle/svg-sanitizer

svg-sanitizer

Biblioteca PHP que sanitiza SVG/XML no confiable filtrando etiquetas, atributos y referencias remotas para prevenir XSS e inyección de scripts en archivos SVG subidos o insertados en línea.

Ver Repositorio
5526917hace 8 díasRevisado por Kitploit

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Compartir

svg-sanitizer

Build Status Code Coverage

Este es mi intento de construir un sanitizador de SVG decente en PHP. El trabajo está en gran medida tomado de DOMPurify.

Instalación

¡O bien requiere enshrined/svg-sanitize a través de composer o descarga el repositorio e inclúyelo a la antigua usanza!

Uso

Usar esto es bastante fácil. Crea una nueva instancia de enshrined\svgSanitize\Sanitizer y luego llama a sanitize mientras le pasas tu SVG/XML sucio

Ejemplo básico

use enshrined\svgSanitize\Sanitizer;

// Create a new sanitizer instance
$sanitizer = new Sanitizer();

// Load the dirty svg
$dirtySVG = file_get_contents('filthy.svg');

// Pass it to the sanitizer and get it back clean
$cleanSVG = $sanitizer->sanitize($dirtySVG);

// Now do what you want with your clean SVG/XML data

Salida

Esto devolverá una cadena SVG/XML saneada o el booleano false si el análisis XML falló (normalmente debido a un archivo mal formateado).

También devuelve false para las entradas que no entregará al analizador XML:

  • un elemento con más de 4.096 atributos
  • un DTD interno en entrada UTF-16 o UTF-32
  • una codificación cuyo marcado no sea ASCII simple, como EBCDIC o UTF-7
  • una raíz <svg> en un espacio de nombres distinto de SVG

getXmlIssues() indica el motivo.

Opciones

Puede pasar su propia lista blanca de etiquetas y atributos utilizando los métodos Sanitizer::setAllowedTags y Sanitizer::setAllowedAttrs respectivamente.

Estos métodos requieren que implemente enshrined\svgSanitize\data\TagInterface o enshrined\svgSanitize\data\AttributeInterface.

<use> está permitido por defecto, con límites sobre cuánto pueden expandirse las referencias (useThreshold()) y anidarse (setUseNestingLimit()). Si no lo necesita, por ejemplo porque inserta SVG no confiable directamente en sus páginas, deje use fuera de su lista de etiquetas permitidas para eliminar toda esa área.

Eliminar referencias remotas

Tiene la opción de eliminar los atributos que hacen referencia a archivos remotos; esto detendrá las filtraciones HTTP pero añadirá una sobrecarga al saneador.

Esto es false por defecto; establézcalo en true para eliminar las referencias.

$sanitizer->removeRemoteReferences(true);

Cuando está habilitado, las referencias remotas también se eliminan del CSS dentro de los elementos <style> y del CSS en los atributos (url(), @import, image-set() y cadenas entrecomilladas que comienzan con una URL remota). Los atributos srcset se eliminan por completo, porque contienen una lista de URL. Este manejo de CSS es de mejor esfuerzo: no es un analizador de CSS completo. Trátelo como defensa en profundidad en lugar de una garantía, y aísle el CSS no confiable en el punto donde se incrusta el SVG.

Nota: si un elemento <style> o un atributo style contiene una referencia remota que se elimina, cualquier secuencia de escape de CSS en ese mismo bloque se normaliza (decodifica) en la salida. Es CSS semánticamente idéntico, pero reescribirá los escapes que un autor escribió a mano.

Visualización de problemas de saneamiento

Puede usar el método getXmlIssues() para devolver un array de problemas que ocurrieron durante el saneamiento.

Esto puede ser útil para el registro o para proporcionar información al usuario sobre por qué se rechazó un SVG.

$issues = $sanitizer->getXmlIssues();

La lista contiene hasta 1.000 problemas. Si hay más, la última entrada indica cuántos quedaron fuera.

Minificación

Puede minificar la salida XML llamando a $sanitizer->minify(true);.

Demostración

Hay una demostración disponible en: http://svg.enshrined.co.uk/

WordPress

Acabo de publicar un plugin de WordPress que contiene este código para que pueda sanear sus cargas de WordPress. Está disponible en el directorio de plugins de WordPress: https://wordpress.org/plugins/safe-svg/

Drupal

Michael Potter ha creado amablemente un módulo de Drupal para esta biblioteca, que está disponible en: https://www.drupal.org/project/svg_sanitizer

TYPO3

Esta biblioteca de saneamiento de SVG se usa por defecto en el núcleo de TYPO3 v9 y versiones posteriores. Consulte la entrada correspondiente del changelog para más detalles.

Pruebas

Puede ejecutarlas ejecutando vendor/bin/phpunit desde el directorio base de este paquete.

Escaneo independiente de archivos mediante CLI

Gracias al trabajo de gudmdharalds, ahora hay un escáner independiente que se puede usar mediante la CLI.

Cualquier error se mostrará en formato JSON. Consulte el PR para ver un ejemplo.

Úselo de la siguiente manera: php svg-scanner.php ~/svgs/myfile.svg

Tareas pendientes

Sería estupendo realizar pruebas más exhaustivas para los SVG/XML; intentaré añadirlas pronto. Si le apetece hacerlo por mí, ¡adelante y envíe un PR!

Descargar herramienta