
Libreria Java che sanifica i file SVG rimuovendo JavaScript, gestori di eventi inline e tag script, bloccando al contempo il caricamento di risorse esterne per prevenire XSS.
SVG Sanitizer è una libreria Java progettata per ripulire i file SVG rimuovendo JavaScript potenzialmente pericoloso, bloccando il caricamento di risorse esterne e prevenendo vulnerabilità XSS (Cross-Site Scripting). È utile per garantire che i file SVG siano sicuri da utilizzare in una varietà di applicazioni, inclusi gli ambienti web.
<script>.Per utilizzare SVG Sanitizer nel tuo progetto Java, includi la dipendenza 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();
}
}
}
Che produrrà l'SVG sanificato:
<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>
Esegui la sanitizzazione da 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());
}
}
Esegui la sanitizzazione da 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)
Questo metodo dovrebbe essere utilizzato solo se caricare l'intero SVG in memoria non rappresenta un problema.
public static void sanitize(InputStream inputStream, OutputStream outputStream)
Scrive l'SVG sanitizzato nel flusso di output specificato
public static InputStream sanitize(InputStream inputStream)
Funziona come filtro, restituendo un nuovo InputStream con l'SVG sanitizzato.
Gli SVG caricati dagli utenti possono contenere contenuti malevoli che potrebbero essere eseguiti in un contesto browser. La sanitizzazione degli SVG è un passaggio importante, ma dovrebbe essere combinata con altre misure per una protezione completa. Vedi Best practice per la sicurezza degli SVG per una panoramica più ampia.
Questo progetto è distribuito con la Licenza MIT