
Bibliothèque Java qui assainit les fichiers SVG en supprimant JavaScript, les gestionnaires d'événements inline et les balises script, tout en bloquant le chargement de ressources externes pour prévenir les XSS.
SVG Sanitizer est une bibliothèque Java conçue pour nettoyer les fichiers SVG en supprimant le JavaScript potentiellement dangereux, en bloquant le chargement de ressources externes et en prévenant les vulnérabilités XSS (Cross-Site Scripting). Elle est utile pour garantir que les fichiers SVG sont sûrs à utiliser dans diverses applications, y compris les environnements web.
<script>.Pour utiliser SVG Sanitizer dans votre projet Java, incluez la dépendance 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();
}
}
}
Ce qui produira le SVG assaini :
<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>
Assainir de InputStream vers 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());
}
}
Assainir d'un InputStream vers un 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)
Cette méthode ne doit être utilisée que si le chargement de l'intégralité du SVG en mémoire ne pose pas de problème.
public static void sanitize(InputStream inputStream, OutputStream outputStream)
Écrit le SVG assaini dans le outputStream donné
public static InputStream sanitize(InputStream inputStream)
Agit comme un filtre, renvoyant un nouveau InputStream avec le SVG assaini.
Les SVG téléversés par les utilisateurs peuvent contenir du contenu malveillant susceptible d'être exécuté dans un contexte de navigateur. L'assainissement des SVG est une étape importante, mais doit être combiné à d'autres mesures pour une protection complète. Voir Bonnes pratiques de sécurité pour les SVG pour un aperçu plus large.
Ce projet est sous licence MIT License