
Biblioteca Java que sanitiza archivos SVG eliminando JavaScript, controladores de eventos en línea y etiquetas script, a la vez que bloquea la carga de recursos externos para prevenir XSS.
SVG Sanitizer es una biblioteca Java diseñada para limpiar archivos SVG eliminando JavaScript potencialmente peligroso, bloqueando la carga de recursos externos y previniendo vulnerabilidades XSS (Cross-Site Scripting). Es útil para garantizar que los archivos SVG sean seguros de usar en una variedad de aplicaciones, incluidos entornos web.
<script>.Para usar SVG Sanitizer en tu proyecto Java, incluye la dependencia Maven io.github.borewit:svg-sanitizer.
public class SVGSanitizerExample {
public static void main(String[] args) {
String dirtySvgContent = """
<svg xmlns="http://www.w3.org/2000/svg" width="400" height="400" viewBox="0 0 124 124" fill="none">
<rect width="124" height="124" rx="24" fill="#000000"/>
<script type="text/javascript">
alert(0x539);
</script>
</svg>""";
try {
String sanitizedSvg = SVGSanitizer.sanitize(dirtySvgContent);
System.out.println(sanitizedSvg);
} catch (Exception e) {
e.printStackTrace();
}
}
}
Lo cual generará el SVG saneado:
<svg xmlns="http://www.w3.org/2000/svg" fill="none" height="400" viewBox="0 0 124 124" width="400">
<rect fill="#000000" height="124" rx="24" width="124"/>
</svg>
Sanitizar de InputStream a OutputStream:
import java.io.*;
public class SVGSanitizerExample {
public static void main(String[] args) throws Exception {
File inputFile = new File("unsafe.svg");
File outputFile = new File("sanitized.svg");
try (InputStream inputStream = new FileInputStream(inputFile)) {
try (OutputStream outputStream = new FileOutputStream(outputFile)) {
SVGSanitizer.sanitize(inputStream, outputStream);
}
}
System.out.println("Sanitized SVG has been saved to " + outputFile.getAbsolutePath());
}
}
Sanitizar de InputStream a InputStream:
import java.io.*;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.w3c.dom.Document;
public class SVGSanitizerExample {
public static void main(String[] args) throws Exception {
File inputFile = new File("unsafe.svg"); // Potentially unsafe SVG file
try (InputStream inputStream = new FileInputStream(inputFile);
InputStream sanitizedStream = SVGSanitizer.sanitize(inputStream)) {
// Pass the sanitized stream to an XML parser (without converting it to a String)
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Document doc = builder.parse(sanitizedStream);
System.out.println("SVG file successfully parsed after sanitization.");
}
}
}
public static String sanitize(String svgContent)
Este método solo debe usarse si cargar el SVG completo en memoria no supone un problema.
public static void sanitize(InputStream inputStream, OutputStream outputStream)
Escribe el SVG saneado en el outputStream dado
public static InputStream sanitize(InputStream inputStream)
Actúa como un filtro, devolviendo un nuevo InputStream con el SVG saneado.
Los SVG subidos por el usuario pueden contener contenido malicioso que podría ejecutarse en un contexto de navegador. Sanear los SVG es un paso importante, pero debe combinarse con otras medidas para una protección completa. Consulte Mejores prácticas de seguridad para SVG para obtener una visión general más amplia.
Este proyecto está licenciado bajo la Licencia MIT