
Java-Bibliothek, die SVG-Dateien bereinigt, indem sie JavaScript, Inline-Event-Handler und Script-Tags entfernt und gleichzeitig das Laden externer Ressourcen blockiert, um XSS zu verhindern.
SVG Sanitizer ist eine Java-Bibliothek, die dazu dient, SVG-Dateien zu bereinigen, indem sie potenziell gefährliches JavaScript entfernt, das Laden externer Ressourcen blockiert und XSS-Schwachstellen (Cross-Site Scripting) verhindert. Sie ist nützlich, um sicherzustellen, dass SVG- Dateien in einer Vielzahl von Anwendungen, einschließlich Webumgebungen, sicher verwendet werden können.
<script>-Tags.Um den SVG Sanitizer in Ihrem Java-Projekt zu verwenden, binden Sie die io.github.borewit:svg-sanitizer Maven-Abhängigkeit ein.
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();
}
}
}
Was das bereinigte SVG ausgibt:
<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>
Bereinigen von InputStream nach 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());
}
}
Bereinigen von InputStream zu 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)
Diese Methode sollte nur verwendet werden, wenn das Laden der gesamten SVG in den Speicher kein Problem darstellt.
public static void sanitize(InputStream inputStream, OutputStream outputStream)
Schreibt das bereinigte SVG in den angegebenen outputStream
public static InputStream sanitize(InputStream inputStream)
Wirkt als Filter und gibt einen neuen InputStream mit dem bereinigten SVG zurück.
Von Benutzern hochgeladene SVGs können schädliche Inhalte enthalten, die im Browser-Kontext ausgeführt werden können. Das Bereinigen von SVGs ist ein wichtiger Schritt, sollte jedoch mit anderen Maßnahmen für vollständigen Schutz kombiniert werden. Siehe SVG security best practices für einen breiteren Überblick.
Dieses Projekt ist unter der MIT License lizenziert.