
Bibliothèque simple et légère qui aide à valider les fichiers SVG de manière sécurisée.
Bibliothèque simple et légère qui aide à valider les fichiers SVG de manière sécurisée.
Elle vous aidera à détecter du contenu malveillant dans les SVG téléversés.
Consultez https://sekurak.pl/pozwalasz-ladowac-pliki-svg-masz-xss-a/ pour plus de détails.
Essayez de téléverser ce SVG dans votre application ; s'il passe et que l'utilisateur peut parcourir ce fichier, vous êtes probablement vulnérable à une attaque XSS.
<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" baseProfile="full" xmlns="http://www.w3.org/2000/svg">
<polygon id="triangle" points="0,0 0,50 50,0" fill="#009900" stroke="#004400"/>
<script type="text/javascript">
alert('Hello, world!');
</script>
</svg>
Ajoutez la dépendance de la bibliothèque :
implementation "com.github.bgalek.security.svg:safe-svg:1.2.0"
Vous pouvez utiliser cette bibliothèque pour vérifier les fichiers SVG téléversés
SvgSecurityValidator svgSecurityValidator = SvgSecurityValidator.builder().build();
String svg = "<?xml version=\"1.0\" standalone=\"no\"?>\n" +
"<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\" \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\n" +
"<svg version=\"1.1\" baseProfile=\"full\" xmlns=\"http://www.w3.org/2000/svg\">\n" +
"<polygon id=\"triangle\" points=\"0,0 0,50 50,0\" fill=\"#009900\" stroke=\"#004400\"/>\n" +
"<script type=\"text/javascript\">\n" +
"alert('Hello, world!');\n" +
"</script>\n" +
"</svg>";
ValidationResult validation = svgSecurityValidator.validate(svg);
if (validation.hasViolations()) {
throw new RuntimeException("this file is suspicious" + validation.getOffendingElements());
}
Si vous souhaitez autoriser d'autres éléments/attributs (potentiellement non sûrs), utilisez
ValidationResult detect = SvgSecurityValidator.builder()
.withAdditionalElements(elements)
.withAdditionalAttributes(attributes)
.build()
.validate(testFile);
Vous pouvez également activer une validation stricte de la syntaxe XML. L'entrée est analysée avec un
analyseur durci contre les XXE (les entités externes et les DTD ne sont jamais résolues, l'expansion des entités est désactivée), et une
InvalidXMLSyntaxException est levée pour du XML mal formé :
ValidationResult detect = SvgSecurityValidator.builder()
.withSyntaxValidation()
.build()
.validate(testFile);
Les entrées de type String et byte[] sont prises en charge (byte[] est décodé en UTF-8).