
Biblioteca Java que sanitiza arquivos SVG removendo JavaScript, manipuladores de eventos inline e tags de script, além de bloquear o carregamento de recursos externos para prevenir XSS.
SVG Sanitizer é uma biblioteca Java projetada para limpar arquivos SVG removendo JavaScript potencialmente perigoso, bloqueando o carregamento de recursos externos e prevenindo vulnerabilidades de XSS (Cross-Site Scripting). É útil para garantir que os arquivos SVG sejam seguros para uso em uma variedade de aplicações, incluindo ambientes web.
<script>.Para usar o SVG Sanitizer em seu projeto Java, inclua a dependência 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();
}
}
}
O que produzirá o SVG sanitizado:
<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>
Sanitize de InputStream para 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());
}
}
Sanitize de InputStream para 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 só deve ser usado se carregar o SVG inteiro na memória não for um problema.
public static void sanitize(InputStream inputStream, OutputStream outputStream)
Grava o SVG sanitizado no outputStream fornecido
public static InputStream sanitize(InputStream inputStream)
Atua como um filtro, retornando um novo InputStream com o SVG sanitizado.
SVGs enviados por usuários podem conter conteúdo malicioso que pode ser executado em um contexto de navegador. A sanitização de SVGs é uma etapa importante, mas deve ser combinada com outras medidas para proteção completa. Consulte Melhores práticas de segurança para SVG para uma visão geral mais ampla.
Este projeto está licenciado sob a Licença MIT