
Простая и лёгкая библиотека, помогающая проверять SVG-файлы с точки зрения безопасности.
Простая и лёгкая библиотека, которая помогает проверять SVG-файлы с точки зрения безопасности.
Она поможет вам обнаруживать вредоносное содержимое внутри загружаемых SVG-файлов.
Подробнее читайте на https://sekurak.pl/pozwalasz-ladowac-pliki-svg-masz-xss-a/.
Попробуйте загрузить этот SVG в ваше приложение: если он проходит проверку и пользователь может просмотреть этот файл — вероятно, вы уязвимы к 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>
Добавьте зависимость библиотеки:
implementation "com.github.bgalek.security.svg:safe-svg:1.2.0"
Вы можете использовать эту библиотеку для проверки загружаемых SVG-файлов
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());
}
Если вы хотите разрешить другие (возможно, небезопасные) элементы/атрибуты, используйте
ValidationResult detect = SvgSecurityValidator.builder()
.withAdditionalElements(elements)
.withAdditionalAttributes(attributes)
.build()
.validate(testFile);
Вы также можете включить строгую проверку синтаксиса XML. Входные данные разбираются с помощью
парсера, защищённого от XXE (внешние сущности и DTD никогда не разрешаются, раскрытие сущностей отключено), и при
некорректном XML выбрасывается InvalidXMLSyntaxException:
ValidationResult detect = SvgSecurityValidator.builder()
.withSyntaxValidation()
.build()
.validate(testFile);
Поддерживаются входные данные как типа String, так и byte[] (byte[] декодируется как UTF-8).