
보안 측면에서 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로 디코딩됩니다).