
Einfache und leichtgewichtige Bibliothek, die hilft, SVG-Dateien auf sichere Weise zu validieren.
Einfache und leichtgewichtige Bibliothek, die dabei hilft, SVG-Dateien auf sichere Weise zu validieren.
Sie hilft Ihnen dabei, schädliche Inhalte in hochgeladenen SVGs zu erkennen.
Weitere Details finden Sie unter https://sekurak.pl/pozwalasz-ladowac-pliki-svg-masz-xss-a/.
Versuchen Sie, dieses SVG in Ihre Anwendung hochzuladen. Wenn es durchgelassen wird und der Benutzer diese Datei ansehen kann, sind Sie wahrscheinlich anfällig für einen XSS-Angriff.
<?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>
Fügen Sie die Bibliotheksabhängigkeit hinzu:
implementation "com.github.bgalek.security.svg:safe-svg:1.2.0"
Sie können diese Bibliothek verwenden, um hochgeladene SVG-Dateien zu prüfen
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());
}
Wenn Sie andere (möglicherweise nicht sichere) Elemente/Attribute zulassen möchten, verwenden Sie
ValidationResult detect = SvgSecurityValidator.builder()
.withAdditionalElements(elements)
.withAdditionalAttributes(attributes)
.build()
.validate(testFile);
Sie können auch eine strikte XML-Syntaxvalidierung aktivieren. Die Eingabe wird mit einem
gegen XXE gehärteten Parser geparst (externe Entitäten und DTDs werden niemals aufgelöst, die
Entitätsexpansion ist deaktiviert), und bei fehlerhaftem XML wird eine
InvalidXMLSyntaxException ausgelöst:
ValidationResult detect = SvgSecurityValidator.builder()
.withSyntaxValidation()
.build()
.validate(testFile);
Sowohl String- als auch byte[]-Eingaben werden unterstützt (byte[] wird als UTF-8 dekodiert).