
مكتبة Java تعقّم ملفات SVG عبر إزالة JavaScript ومعالجات الأحداث المضمّنة ووسوم script مع حظر تحميل الموارد الخارجية لمنع XSS.
SVG Sanitizer هي مكتبة Java مصممة لتنظيف ملفات SVG عبر إزالة JavaScript التي قد تكون خطيرة، وحظر تحميل الموارد الخارجية، ومنع ثغرات XSS (البرمجة النصية عبر المواقع). وهي مفيدة لضمان أن تكون ملفات SVG آمنة للاستخدام في مجموعة متنوعة من التطبيقات، بما في ذلك بيئات الويب.
<script>.لاستخدام SVG Sanitizer في مشروع Java الخاص بك، أضف اعتماد 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();
}
}
}
مما سيُخرج ملف SVG المُعقَّم:
<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>
عقّم من InputStream إلى 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());
}
}
عقّم من InputStream إلى 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)
لا ينبغي استخدام هذه الطريقة إلا إذا لم يكن تحميل ملف SVG بالكامل في الذاكرة مشكلة.
public static void sanitize(InputStream inputStream, OutputStream outputStream)
يكتب ملف SVG المُعقَّم إلى outputStream المحدد
public static InputStream sanitize(InputStream inputStream)
يعمل كمرشّح، ويعيد InputStream جديدًا يحتوي على SVG المُعقَّم.
قد تحتوي ملفات SVG التي يرفعها المستخدمون على محتوى ضار قد يُنفَّذ في سياق المتصفح. يُعدّ تعقيم ملفات SVG خطوة مهمة، لكن ينبغي دمجه مع تدابير أخرى للحماية الكاملة. راجع أفضل ممارسات أمان SVG للحصول على نظرة عامة أوسع.
هذا المشروع مرخّص بموجب MIT License